授予特定表访问权限的最佳实践,SQL

时间:2014-04-04 14:20:34

标签: sql sql-server sql-server-2008

我在SQL中创建一个用户,我希望只对我的数据库中的4个表进行读/写访问:

CREATE LOGIN MyUser 
    WITH PASSWORD = 'xyqe123';
USE [EODB];
GO
CREATE USER MyUser FOR LOGIN  MyUser;
GO 

现在通过使用(强力有点),简化,成本无效的方法我定义:

GRANT select,insert,update,delete ON [MyDB].[dbo].[t1] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t2] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t3] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t4] TO [MyUser] 
GO
Deny select,insert,update,delete ON [MyDB].[dbo].[t5] TO [MyUser] 
GO
Deny select,insert,update,delete ON [MyDB].[dbo].[t6] TO [MyUser] 
GO
Deny select,insert,update,delete ON [MyDB].[dbo].[t7] TO [MyUser] 
GO
.......
.......///continues for 14 more tables

以上内容满足了我的需求,但提到的却是#34;愚蠢的"。我尝试的是将[MyUser]设置为[denydatareader][denydatawriter]模式,并在授予4个表的权限后,但它没有工作。

我的问题是如何使用尽可能少的陈述来实现我的目标?

2 个答案:

答案 0 :(得分:1)

不要将用户添加到datareaderdenydatareader等组,而只需使用前4个语句。只要您没有将用户添加到任何组,用户将被限制为这4个表。

GRANT select,insert,update,delete ON [MyDB].[dbo].[t1] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t2] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t3] TO [MyUser] 
GO
GRANT select,insert,update,delete ON [MyDB].[dbo].[t4] TO [MyUser] 

答案 1 :(得分:1)

首先,我建议您考虑使用自定义数据库角色。根据用户的“逻辑角色”创建逻辑角色。如果您的应用程序基于Active Directory priv。 (即集成登录) - 这确实是一个AD域问题。否则,您只需为数据库用户添加/删除角色即可。

然后,您可以在基础表,视图等上授予角色。

如果问题很简单,我如何简单地在14个不同的表上授予角色,在此上下文中使用动态sql没有任何错误。滚动你自己的例程,授予1个表的角色(传入名称),然后调用它14次。