You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure SQL Server中的AAD用户授予全数据库管理员权限

嘿,根据你描述的场景,要让这个AAD用户拿到所有数据库的完全访问权限,有两个实用方案,你可以根据实际权限需求来选:

给AAD用户授予Azure SQL Server所有数据库的完全访问权限

方案1:设为Azure AD服务器管理员(最高权限)

这是最直接的方式,用户会拿到整个SQL Server实例的完全控制权——包括所有数据库的管理权限、创建/删除数据库、配置服务器级别的设置等等。操作得在Azure Portal里完成:

  • 登录Azure Portal,找到你的SQL Server资源
  • 在左侧导航栏的「设置」分组里找到「Azure Active Directory」(或者直接搜「管理员」)
  • 点击「添加管理员」,搜索并选中目标AAD用户,保存即可

方案2:授予所有数据库的db_owner权限(数据库级最高权限)

如果不想给服务器级的最高权限,只需要用户拥有所有数据库的完全访问(但不能管理服务器本身),可以按以下步骤操作:

步骤1:创建AAD服务器登录

首先得在master数据库里创建对应的服务器登录,这样才能跨数据库授予权限:

USE [master]
GO
CREATE LOGIN [usename_emaildomain#EXT#@mydirectory.onmicrosoft.com] FROM EXTERNAL PROVIDER;
GO

步骤2:给现有数据库批量添加db_owner角色

先授予用户查看所有数据库的权限,再用循环给每个现有数据库添加db_owner角色(系统数据库可以根据需要选择是否包含):

-- 授予查看所有数据库的权限
GRANT VIEW ANY DATABASE TO [usename_emaildomain#EXT#@mydirectory.onmicrosoft.com];
GO

-- 为所有非系统数据库添加db_owner角色
DECLARE @dbname NVARCHAR(128)
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 先判断用户是否已存在,避免报错
    EXECUTE('USE [' + @dbname + ']; 
             IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = ''usename_emaildomain#EXT#@mydirectory.onmicrosoft.com'')
             BEGIN
                 CREATE USER [' + 'usename_emaildomain#EXT#@mydirectory.onmicrosoft.com' + '] FROM EXTERNAL PROVIDER;
                 EXEC sp_addrolemember ''db_owner'', [' + 'usename_emaildomain#EXT#@mydirectory.onmicrosoft.com' + '];
             END')
    FETCH NEXT FROM db_cursor INTO @dbname
END

CLOSE db_cursor
DEALLOCATE db_cursor
GO

步骤3:自动给新创建的数据库加权限

如果希望未来新建的数据库也自动给这个用户db_owner权限,可以在master库创建一个服务器级触发器:

USE [master]
GO
CREATE TRIGGER AutoAddDBOwnerForAADUser
ON ALL SERVER 
FOR CREATE_DATABASE
AS
BEGIN
    DECLARE @dbname NVARCHAR(128) = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(128)')
    EXECUTE('USE [' + @dbname + ']; 
             IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = ''usename_emaildomain#EXT#@mydirectory.onmicrosoft.com'')
             BEGIN
                 CREATE USER [' + 'usename_emaildomain#EXT#@mydirectory.onmicrosoft.com' + '] FROM EXTERNAL PROVIDER;
                 EXEC sp_addrolemember ''db_owner'', [' + 'usename_emaildomain#EXT#@mydirectory.onmicrosoft.com' + '];
             END')
END
GO

注意:记得把所有代码里的usename_emaildomain#EXT#@mydirectory.onmicrosoft.com替换成你目标AAD用户的完整用户主体名称(UPN)哦。

内容的提问来源于stack exchange,提问作者Liero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:31:53