Sql 将Select授予指定列的同义词

Sql 将Select授予指定列的同义词,sql,sql-server,Sql,Sql Server,我一直试图限制用户对同义词的select访问。考虑下面的内容: CREATE USER Test_User WITHOUT LOGIN; CREATE SYNONYM S_TEST FOR dbo.Items; GRANT SELECT ON dbo.S_TEST (Id, [Name]) TO Test_User; 我得到一个错误: Msg 1020,第16级,第3状态,第4行 子实体列表(例如列或安全表达式) 无法为实体级权限指定 但是,如果我将其更改为直接使用dbo.Items,则它可

我一直试图限制用户对同义词的select访问。考虑下面的内容:

CREATE USER Test_User WITHOUT LOGIN;
CREATE SYNONYM S_TEST FOR dbo.Items;

GRANT SELECT ON dbo.S_TEST (Id, [Name]) TO Test_User;
我得到一个错误:

Msg 1020,第16级,第3状态,第4行
子实体列表(例如列或安全表达式) 无法为实体级权限指定

但是,如果我将其更改为直接使用dbo.Items,则它可以工作:

GRANT SELECT ON dbo.Items (Id, [Name]) TO Test_User;
如何限制对指定用户的同义词进行选择?这可能吗?如果没有,还有其他选择吗?

“如何限制对指定用户的同义词进行选择?”您不能。同义词只是对象的替代名称。查看对象是否存在的检查在引用
同义词时推迟到运行时,而不是在创建对象时。例如
为MadeUp.TableObject创建同义词dbo.MySynonym将创建同义词,即使引用对象不存在

CREATE SYNONYM dbo.MySynonym FOR MadeUp.TableObject;
GO

SELECT *
FROM dbo.MySynonym; --fails
GO

DROP SYNONYM dbo.MySynonym;
GO

所有权限都需要设置为同义词引用的对象,而不是同义词本身。

我会用别名(as)尝试它,但不确定它是否有效xD可能
授予dbo上的SELECT。项(Id,[Name])以测试用户作为S\U测试我真的需要一个能处理同义词的解决方案。我使用同义词在测试和生产环境之间创建抽象。当前的系统访问外部数据库,所以它就是为了这个目的。这也是我的想法,我不得不尝试。无论如何,你能解释一下当我试图为同义词指定列时收到的错误消息吗?同义词没有列@jegtugado,因此你不能为其权限指定列(子实体)级别对象。