裂脑管理员

S. *_*ker 4 sql-server permissions architecture

我已被任命为我们组织的 DBA。高级官员要求我允许 IT 的两个部门完全控制他们的数据库。他们要求以下布局:

      Admins
SubAdmin  SubAdmin
Run Code Online (Sandbox Code Playgroud)

这些SubAdmins应该能够在他们自己的数据库上执行所有可能的功能,但不应该能够在任何其他数据库上执行任何功能。

这不包括服务器级别的事情,例如终止会话、构建登录触发器、更改资源调控器设置等,但它们应该能够创建数据库。

我为 SubAdmin 组创建了一个服务器角色,该角色授予CREATE ANY DATABASE. 这很有效,除了当 SubAdmin 尝试将新创建的数据库的所有者更改为sa. 他们不能,因为他们无法模拟该sa帐户。

仅编写一些将数据库所有者更改为sa每晚的powershell 脚本会更容易吗?


sa在此示例中使用该帐户仅作为演示。我们希望数据库所有者是一个通用的、低权限的帐户。因此,当 SubAdmin 创建数据库时,他们:

  • 创建数据库
  • 授予他们的管理员组 db_owner 权限
  • 然后应该执行ALTER AUTHENTICATION将数据库所有者更改为通用的低权限帐户

数据库都在同一个服务器和同一个实例上。

Geo*_*ios 5

我会在CREATE DATABASE.

像这样的东西:

CREATE TRIGGER [CreateDatabase_OwnerMapper]
    ON ALL SERVER 
    WITH EXECUTE AS 'sa'
    FOR CREATE_DATABASE
    AS
    BEGIN

    SET NOCOUNT ON;

    DECLARE @DatabaseName NVARCHAR(128) = 
    (SELECT CAST(eventdata().query('/EVENT_INSTANCE/DatabaseName[1]/text()') as NVARCHAR(128)));

    DECLARE @SQL NVARCHAR(MAX) = '';
    SET @SQL = 'ALTER AUTHORIZATION ON DATABASE::' + @DatabaseName + ' TO sa';

    EXEC @SQL;

END
Run Code Online (Sandbox Code Playgroud)

这将触发触发器以在CREATE DATABASE发出命令时自动更改所有者。

您可以db_owner潜在地授予自己触发器。我在我们的债务环境中这样做。