我想将集成安全性与我的内部应用程序一起使用,这些应用程序都在一个域上。不幸的是,我一直无法让它正常工作。我想在 SQL Server 中为整个 Exchange(Active Directory)组分配一个角色,以便对某些表进行读/写访问。这样我就不必在有人被雇用时创建操作员,也不必在有人被解雇时删除操作员。这可能吗?我会采取什么步骤来做到这一点?
我想将集成安全性与我的内部应用程序一起使用,这些应用程序都在一个域上。不幸的是,我一直无法让它正常工作。我想在 SQL Server 中为整个 Exchange(Active Directory)组分配一个角色,以便对某些表进行读/写访问。这样我就不必在有人被雇用时创建操作员,也不必在有人被解雇时删除操作员。这可能吗?我会采取什么步骤来做到这一点?
示例脚本
sp_addrolemember
从 SQL Server 2012 开始不推荐使用,ALTER ROLE
应改为使用 where。从marc_s回答“如何在 SQL Server 中添加 Active Directory 用户组作为登录名”:
在 SQL Server Management Studio 中,转到
Object Explorer > (your server) > Security > Logins
并右键单击New Login
:然后在弹出的对话框中,选择您想要查看的对象类型(
Groups
默认情况下禁用 - 选中它!)并选择您要查找对象的位置(例如 useEntire Directory
),然后找到您的 AD 组.您现在有一个常规的 SQL Server 登录 - 就像您为单个 AD 用户创建一个一样。为该新登录名提供所需数据库的权限,然后就可以了!
该 AD 组的任何成员现在都可以登录到 SQL Server 并使用您的数据库。
将 SQL Server 中的权限授予 AD 组相对简单。它可以通过 T-SQL 或 Management Studio 完成。
例如,如果您有一个名为 的 AD 组
MYDOMAIN\APPLICATION SUPPORT
,您将在服务器级别创建登录,然后使用到各个数据库的映射来提供更精细的权限,例如数据读取器。理想情况下,所有应用程序访问都应该通过存储过程*,因此只需要对该数据库中那些存储过程的执行权限。
* 从安全的角度来看,要允许特定用户查看某些特定数据,您可以创建一个过程并授予用户对该过程的执行权限,仅此而已。允许用户直接查询意味着对所有涉及的表授予选择权限。使用过程也更容易,调试也更容易。
存储过程抽象表访问并限制访问。对于 DBA 类型,这就像“让我看看你所有的实例变量:我不想使用方法、getter 或 setter”。
如果用户是在 SQL 中具有 Sysadmin 权限的 DOMAIN\SecurityGroup 的成员,那么在访问数据库时将使用该权限。否则,您需要查看在每个数据库中授予了哪些 DOMAIN\SecurityGroup(s) 权限。如果用户是2个SecurityGroup的成员,SecGroupA有选择权限,SecGroupB有插入权限,则用户可以选择插入。