sql - 将选择授予指定列的同义词
问题描述
我一直在尝试限制用户对同义词的选择访问。考虑以下内容:
CREATE USER Test_User WITHOUT LOGIN;
CREATE SYNONYM S_TEST FOR dbo.Items;
GRANT SELECT ON dbo.S_TEST (Id, [Name]) TO Test_User;
我收到一个错误:
消息 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;
也会创建同义词。
CREATE SYNONYM dbo.MySynonym FOR MadeUp.TableObject;
GO
SELECT *
FROM dbo.MySynonym; --fails
GO
DROP SYNONYM dbo.MySynonym;
GO
所有权限都需要设置同义词引用的对象,而不是同义词本身。
推荐阅读
- postgresql - Postgres的行构造函数中哪些字符被双引号括起来
- php - php7 在 windows utf-8 字符问题中弹出
- javascript - 从 JSON 数据中循环遍历第一个数组中的多个对象,使用 FUNCTION COMPONENT 在 React 中显示两个带有对象的数组
- python - 如何根据变量在列中出现的次数对变量进行分组?
- c# - 在 .NET Core 控制台应用程序中使用 appsettings.ENV.json
- javascript - 动态加载 json 语言文件
- scala - 给定一个整数数组,返回两个数字的索引,使它们加起来为 Scala 的特定目标
- c++ - 如何将对象从 c 导出到节点插件 api
- c++ - C ++中两个映射之间的同时联合和交集
- python - Python 和文件 (IO) 打开和关闭