Azure专用SQL池创建数据库主密钥遇权限报错咨询
Azure Synapse 专用SQL池创建数据库主密钥权限报错解决方案
核心错误原因
你遇到的两个报错本质是两个操作误区导致的:
- 执行创建主密钥操作时使用的账号没有目标数据库的对应权限,且大概率未在目标业务库创建对应的数据库用户映射
- 授权语句指定的数据库范围错误:你需要创建的是业务用户库的数据库主密钥,而非master库的,同时Azure Synapse专用池的master库为平台托管,普通账号无权限对其进行CONTROL级别的授权操作。
分步操作指引
- 首先使用创建专用SQL池时配置的SQL管理员账号(Azure AD管理员或实例部署时设置的SQL身份验证管理员账号)登录SQL实例,普通useradmin角色账号默认无安全配置相关的操作权限。
- 登录后先切换到需要创建主密钥的目标业务数据库,禁止在master库执行业务加密相关操作,切库语句如下:
USE <替换为你的专用SQL池业务数据库名称>; - 如果你需要给useradmin账号授予创建主密钥的权限,先在当前目标业务库下完成用户映射和权限授予,执行以下语句:
-- 将服务器级登录名useradmin映射为当前业务库的数据库用户 CREATE USER [useradmin] FROM LOGIN [useradmin]; -- 为该用户授予当前业务库的CONTROL权限,注意不要指定master库 GRANT CONTROL ON DATABASE::<替换为你的专用SQL池业务数据库名称> TO [useradmin]; - 权限配置完成后,切换到useradmin账号连接,再次确认连接的是目标业务库,执行主密钥创建语句即可:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';
注意事项
- 禁止在master库创建业务侧使用的数据库主密钥:Azure Synapse专用SQL池的数据库主密钥作用域为单用户库,master库下创建的密钥无法被业务库的加密场景(包括外部数据源凭据、列级加密、TDE自定义密钥等)调用。
- 不要尝试修改master库的权限配置:专用SQL池的master库为平台托管资源,即使用服务器级管理员账号登录,也无法对其授予非平台默认的权限,强行执行相关授权语句必然报错。
- 生产环境创建主密钥时请替换为符合强密码规范的自定义密码,要求长度不低于15位,同时包含大小写字母、数字、特殊符号,禁止与登录账号密码复用。
内容的提问来源于stack exchange,提问作者L. Full
相关产品推荐
相关产品推荐

