sql - 如何授予用户访问 SQL Server 中的所有 View 但不能访问表和存储过程?

标签 sql sql-server-2012

我正在尝试创建一个新的临时用户,该用户只能访问所有只读 View 。

用户不应具有对表和存储过程的读取权限。

我尝试了以下查询,但它也提供了对表的访问权限。

EXEC sp_addrolemember db_datareader, 'user1'

GRANT VIEW DATABASE STATE TO  'user1'
GRANT VIEW DEFINITION TO 'user1'

最佳答案

执行此操作的主要方法是仅向 View 对象授予权限。您可以使用以下语句遍历数据库中的所有 View :

DECLARE @sql VARCHAR(MAX)

SELECT GrantStatement = 'GRANT SELECT ON ' + TABLE_NAME + ' TO user1'
INTO #grants
FROM
INFORMATION_SCHEMA.Views

WHILE EXISTS (SELECT 1 FROM #grants)
BEGIN
    SELECT TOP 1 @sql = GrantStatement
    FROM #grants

    EXEC (@sql)

    DELETE #grants
    WHERE GrantStatement = @sql
END

第二种技术是创建一个仅用于 View 的单独模式,然后将权限授予整个模式。可以这样做:

GRANT SELECT ON SCHEMA::ViewSchema TO user1

关于sql - 如何授予用户访问 SQL Server 中的所有 View 但不能访问表和存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664224/

相关文章:

sql - T-SQL-连接变量行数

c# - SQL Server 阻止访问组件 'sys.sp_OACreate' 的过程 'Ole Automation Procedures'

sql - 记录级权限

sql - 像数据库行的引用计数或共享指针之类的东西?

sql - Postgres : getting latest rows for an array of keys

mysql - Insert based on Another Insert with mysql 插入

sql - 计算多个日期的运行总计

SQL Server 数据库不会收缩

sql-server - SQL Server 中的 Try-Catch 存储过程

sql - 如何将输入参数传递给sp_executesql?