MSSQL:只允许阅读某些视图的有限帐户?

时间:2009-04-14 13:22:37

标签: sql-server security

如何创建仅允许读取特定数据库的某些视图的MS SQL服务器用户?

2 个答案:

答案 0 :(得分:11)

这是一个创建新用户并让他只选择特定视图权限的脚本。

USE [master]
GO
CREATE LOGIN [LimitedUser] WITH PASSWORD=N'testPass', 
           DEFAULT_DATABASE=[master], 
           CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [TestDB]
GO
CREATE USER [LimitedUser] FOR LOGIN [LimitedUser]
GO
use [TestDB]
GO
GRANT SELECT ON [dbo].[myView] TO [LimitedUser]
GO

修改

您可能需要考虑使用角色,而不是针对特定用户执行此操作。

USE [TestDB]
GO
CREATE ROLE [LimitedRole]
GO
GRANT SELECT ON [dbo].[TestView] TO [LimitedRole]
GO
EXEC sp_addrolemember N'LimitedRole', N'LimitedUser'
GO

这样,如果您有多个用户,例如在Windows身份验证模式下,您可能拥有许多用户,则可以授予所有用户访问此角色的权限。这样,在添加/删除视图时,您无需触及每个用户。

答案 1 :(得分:2)

这样做的诀窍是不向Public角色提供任何明确的权限。每个用户都不可撤销地成为该角色的成员,因此无法阻止数据库的任何用户拥有您向公众提供的任何权利。

除此之外,您只需将用户添加到相应的数据库中,并仅授予他们您感兴趣的对象的权限。