Sql server 已拒绝用户选择表,但用户可以通过同义词访问表

Sql server 已拒绝用户选择表,但用户可以通过同义词访问表,sql-server,security,Sql Server,Security,用户被拒绝选择DB1中的表T1,但用户可以在DB2中创建同义词并从DB1.TB1中进行选择。 我不能拒绝为用户创建同义词。是否可以阻止用户在创建DB1.TB1的同义词后进行选择 use d2 create synonym dbo.cl for d1.dbo.cl select top 100 * from dbo.cl (100 rows affected) select top 100 * from d1.dbo.cl The SELECT permission was denied on

用户被拒绝选择DB1中的表T1,但用户可以在DB2中创建同义词并从DB1.TB1中进行选择。 我不能拒绝为用户创建同义词。是否可以阻止用户在创建DB1.TB1的同义词后进行选择

use d2
create synonym dbo.cl for d1.dbo.cl
select top 100 * from dbo.cl
(100 rows affected)

select top 100 * from d1.dbo.cl
The SELECT permission was denied on the object 'cl', database 'd1', schema 'dbo'.
用户通过d2中的AD组拥有db_所有者这是因为SQL Server中的“所有权链接”功能。这意味着,如果一个对象(在您的例子中是同义词)正在调用另一个对象(在您的例子中是表),那么它将检查对象的所有者是否相同。如果两个对象的所有者相同,则不会检查对被调用对象(即您的表)的访问

例如,此功能就是为什么用户可以访问视图而不必访问基础表

默认情况下,通常不会跨数据库启用此所有权链接。所以检查一下你的情况。 可以在数据库级别授予该权限:

SELECT is_db_chaining_on, name FROM sys.databases;
也可以在服务器级别为所有数据库授予:

EXECUTE sp_configure 'show advanced', 1;  
RECONFIGURE;  
EXECUTE sp_configure 'cross db ownership chaining';

你能发布一个脚本来显示这一点吗?如果没有SELECT权限,用户不可能通过同义词从表中进行选择。