我正在尝试创建一个新的临时用户,该用户只能访问所有只读 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/