授予指定列的同义词的选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了授予指定列的同义词的选择相关的知识,希望对你有一定的参考价值。

我一直在尝试限制用户对同义词的选择访问权限。请考虑以下内容:

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;

如何将SELECT限制在指定用户的同义词上?这可能吗?如果没有,还有其他选择吗?

答案

“如何将SELECT限制在指定用户的同义词上?”您不能。同义词只是对象的替代名称。创建对象时,参考SYNONYM not时将检查对象是否存在的检查推迟到运行时进行。例如,即使参考对象不存在,CREATE SYNONYM dbo.MySynonym FOR MadeUp.TableObject; will也会创建同义词。

CREATE SYNONYM dbo.MySynonym FOR MadeUp.TableObject;
GO

SELECT *
FROM dbo.MySynonym; --fails
GO

DROP SYNONYM dbo.MySynonym;
GO

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

以上是关于授予指定列的同义词的选择的主要内容,如果未能解决你的问题,请参考以下文章

mysql仅授予一张表及其某些列的选择权限

Oracle创建只读用户,授予视图/同义词/会话权限

在用户只能访问与其 id 列相关的列的条件下向用户授予选择列权限 - Oracle pl/sql

OCP 071中文考试题库(cuug整理)第45题

在同义词和基础表上访问权限

同义词