我有一个 SQL Server 2012 实例和一个 Active Directory 组,我可以将 Active Directory 用户添加到其中。我在该组中有我的个人 AD 帐户 (MyAccount) 和服务帐户 (ServiceAccount)。
我需要为整个实例授予对此 AD 组的管理员访问权限。这意味着我不需要对创建的每个新表和数据库执行授权命令。该组中的任何用户都将自动能够创建、删除、插入、选择等。
甚至更棘手。我必须能够使用 Windows 身份验证通过 MyAccount 登录(我在 Windows 上登录,然后登录到 SQL Server 而无需再次输入用户名密码),并通过输入用户名和密码使用 ServiceAccount 登录。我不能被迫使用 ServiceAccount 登录 Windows(或使用该帐户运行 SSMS/SSDT/等)才能登录 MSSQL。
配置它的最佳实践是什么?
您所要求的某些内容实际上非常简单。
您的 AD 组的权限
您为 AD 组创建登录名
然后授予它您想要的访问权限。您说您想授予它
Admin
访问权限,但除非这是您的 DBA 团队,否则我不会将 AD 组添加到类似sysadmin
. 而是授予他们您真正希望他们拥有的权限。听起来你想要SELECT
针对数据库中的任何表/视图运行的角色UPDATE
权限的角色。INSERT
DELETE
EXECUTE
数据库中任何存储过程或函数能力的权限。要添加它,请在每个用户数据库上运行以下命令。
如果您希望将这些权限添加到新用户数据库中,那么也要在
model
数据库中运行脚本。使用您的服务帐户连接
如果您有一个应用程序在您的服务帐户下运行,那么当该应用程序使用受信任的身份验证连接时,它将使用该服务帐户连接到 SQL。但是,如果您想使用 SSMS 之类的东西连接到 SQL,那么您有两种选择。您可以使用服务帐户登录机器,也可以以其他用户身份运行 SSMS。
要在其他用户下运行 SSMS,请按住SHIFT 键并右键单击 SSMS 的快捷方式并选择
Run as different user
然后,您将获得 AD 登录的登录名/密码提示。输入您的服务帐户名称和密码。一旦 SSMS 打开任何受信任的(Windows 身份验证)连接,将使用您连接下的 AD 登录名(在这种情况下为您的服务帐户)进行。
您可以使用以下代码授予管理员访问权限:
这将允许任何属于 [DOMAIN\ADGroupName] 成员的用户在不指定用户名/密码的情况下登录 SQL Server,并将授予这些用户对整个实例(包括所有数据库)的管理员访问权限。
您可以使用命令行小程序“runas”来“作为”服务帐户启动 SQL Server Management Studio。其语法将是(从命令行):
以这种方式授予
CONTROL SERVER
组或登录权限允许您还可以DENY
访问特定对象或数据库。例如,您可以DENY ALTER ON DATABASE::master TO [DOMAIN\ADGroupName];
阻止这些用户对 进行更改master
,同时仍然允许他们创建和删除其他数据库、表等。请注意,具有CONTROL SERVER
权限的用户可以轻松创建 SQL 登录,授予该登录sysadmin
访问权限,并拥有完全访问 SQL Server 中的所有内容,包括对master
. 这通常被认为是一个相当大的安全风险,并且可能只用于非生产盒。我使用最优秀的SQL Server 权限层次结构海报来查看特定权限含义的高级视图。