数据库A的用户为test1,test2,数据库角色成员是db_owner+public 数据库B的用户为test1,数据库角色成员是db_owner+public 以test2登录数据库A,创建视图create view vTable1 as select * from B.test1.table1 提示错误: 服务器用户 'test2' 不是数据库 'B' 中的有效用户。 A与B都开启了跨数据库所有权链接的功能
“跨数据库所有权链接”并不是像你这样用的。它的意思是说: 在进行跨服务器访问对象时,如果开启了“跨数据库所有权链”,对于同一个所有者的对象,不在被调用对象的数据库中检查调用者的权限!(只在调用对象的数据库中检查调用者对该对象的权限)下面一段是COPY联机帮助的: ================================================================ 例如,如果在数据库 A 和数据库 B 之间启用了跨数据库所有权链接,则任一数据库的 db_owner 固定数据库角色的成员都可以访问另一数据库。过程很简单:Diane(数据库 A 中 db_owner 角色的成员)在数据库 A 中创建了用户 Stuart。Stuart 已经作为用户存在于数据库 B 中。然后 Diane 在数据库 A 中创建一个对象(由 Stuart 所拥有),该对象调用数据库 B 中 Stuart 所拥有的任何对象。因为调用对象和被调用对象的所有者相同,所以当 Diane 通过她创建的对象访问数据库 B 中的对象时,不会检查她对该对象的权限。
EXEC sp_addlinkedserver
--要创建的链接服务器名称
'ai_mssql',
--产品名称
'ms',
--OLE DB 字符
'SQLOLEDB',
--数据源
'218.204.111.111,3342'
GO
--创建链接服务器上远程登录之间的映射
EXEC sp_addlinkedsrvlogin
'ai_mssql',
'false',
NULL,
--远程服务器的登陆用户名
'zhangzhe',
--远程服务器的登陆密码
'fish2231'
go
--查询数据
select * from ai_mssql.pubs.dbo.jobs
go
操作的时候是完全安照示例中的操作来的,
select * from pubs.dbo.jobs
数据库B的用户为test1,数据库角色成员是db_owner+public
以test2登录数据库A,创建视图create view vTable1
as
select * from B.test1.table1
提示错误:
服务器用户 'test2' 不是数据库 'B' 中的有效用户。
A与B都开启了跨数据库所有权链接的功能
在进行跨服务器访问对象时,如果开启了“跨数据库所有权链”,对于同一个所有者的对象,不在被调用对象的数据库中检查调用者的权限!(只在调用对象的数据库中检查调用者对该对象的权限)下面一段是COPY联机帮助的:
================================================================
例如,如果在数据库 A 和数据库 B 之间启用了跨数据库所有权链接,则任一数据库的 db_owner 固定数据库角色的成员都可以访问另一数据库。过程很简单:Diane(数据库 A 中 db_owner 角色的成员)在数据库 A 中创建了用户 Stuart。Stuart 已经作为用户存在于数据库 B 中。然后 Diane 在数据库 A 中创建一个对象(由 Stuart 所拥有),该对象调用数据库 B 中 Stuart 所拥有的任何对象。因为调用对象和被调用对象的所有者相同,所以当 Diane 通过她创建的对象访问数据库 B 中的对象时,不会检查她对该对象的权限。