MS SQL:如何创建仅具有已定义视图权限的用户?

时间:2017-11-16 10:54:21

标签: sql sql-server

我想创建一个只拥有已定义视图权限的用户。

这是它应该如何工作: - DB01 =>没有权限 - vView01 =>成功

目前,每个用户都拥有对视图和数据库的权限,或者没有...

任何想法?

非常感谢!

哈德

1 个答案:

答案 0 :(得分:1)

仅对视图授予用户权限,ownership chaining允许访问基础表,即使没有对这些对象的权限,只要所涉及的所有对象具有相同的所有者。

不幸的是,没有GRANT语法来授予所有当前和未来视图的权限,以便用户具有权限当前视图和新视图。但是,可以通过在不同的模式中创建视图并在模式级别授予权限来实现此功能:

GRANT SELECT ON SCHEMA::ViewSchema TO <some-user-or-role>;

否则,您需要在创建后为现有视图和每个新视图授予权限。下面是一个示例脚本,可以快速完成此任务。

DECLARE @GrantScript nvarchar(MAX);

SET @GrantScript = (
    SELECT N'GRANT SELECT ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id))  + '.' + QUOTENAME(name) + N' TO <some-user-or-role>;'
    FROM sys.views
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');

EXEC sp_executesql @GrantScript;