Answers:
样例脚本
USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO
sp_addrolemember
从SQL Server 2012开始不推荐使用,ALTER ROLE
应改为在其中使用。
在SQL Server中向AD组授予权限相对简单。可以通过T-SQL或Management Studio来完成。
例如,如果您有一个名为的AD组MYDOMAIN\APPLICATION SUPPORT
,则可以在服务器级别创建登录名,然后使用到各个数据库的映射来提供更细化的权限,例如数据读取器。
理想情况下,所有应用程序访问都应通过存储过程*进行,因此只需要对该数据库中的那些存储过程具有执行权限。
*从安全角度考虑,要允许特定用户查看某些特定数据,您可以创建一个过程并授予该用户对该过程的执行权限,而不能执行其他任何操作。允许用户直接查询将意味着对所有涉及的表给予选择权限。使用过程也更容易,调试也更容易。
存储过程将表访问抽象化并限制了访问。对于DBA类型,这就像“让我看到您所有的实例变量:我不想使用方法,getter或setter”。
从marc_s回答“如何在SQL Server中添加Active Directory用户组作为登录名”:
在SQL Server Management Studio中,转到Object Explorer > (your server) > Security > Logins
并右键单击New Login
:
然后在弹出的对话框中,选择要查看的对象类型(Groups
默认情况下处于禁用状态-选中它!),然后选择要在其中查找对象的位置(例如使用Entire Directory
),然后找到广告组。
现在,您具有常规的SQL Server登录名-就像为单个AD用户创建登录名一样。给该新登录名所需的数据库权限,然后就可以使用!
该AD组的任何成员现在都可以登录SQL Server并使用您的数据库。
如果用户是在SQL中具有Sysadmin权限的DOMAIN \ SecurityGroup的成员,则在访问数据库时将使用该成员。否则,您需要查看在每个数据库中赋予了DOMAIN \ SecurityGroup哪些权限。如果用户是2个SecurityGroups的成员,并且SecGroupA具有选择权限,而SecGroupB具有插入权限,则用户可以选择并插入。