如何在Azure SQL数据库中跨库创建master库的登录名
Azure SQL 从业务库创建master库登录名的实现方案
Azure SQL 数据库单库模式原生不支持USE语句跨库切换上下文,你遇到的报错翻译为:USE 语句不支持在不同数据库之间切换,请使用新连接来连接到其他数据库。要从业务库(如示例中的Abc Database)侧完成master库的登录名创建,可使用以下几种方式实现:
方案1:通过EXTERNAL DATA SOURCE(弹性查询)跨库执行
该方式不需要切换连接,直接在业务库内完成master库的语句执行,步骤如下:
- 在业务库中创建指向master库的数据库范围凭据
CREATE DATABASE SCOPED CREDENTIAL Master_Credential WITH IDENTITY = '你的Azure SQL服务器管理员账号', SECRET = '你的Azure SQL服务器管理员密码';
- 创建指向同服务器master库的外部数据源
CREATE EXTERNAL DATA SOURCE Master_DataSource WITH ( TYPE = RDBMS, LOCATION = '你的Azure SQL服务器名.database.windows.net', DATABASE_NAME = 'master', CREDENTIAL = Master_Credential );
- 通过
EXEC AT语法在master库上下文执行创建登录名的语句
EXEC('CREATE LOGIN [自定义登录名] WITH PASSWORD = N''符合Azure SQL密码复杂度要求的字符串'';') AT Master_DataSource;
方案2:通过Azure管理工具/SDK直接执行
如果不需要在SQL侧完成逻辑,也可以通过Azure官方管理工具跨库执行master语句,无需配置外部数据源:
- PowerShell示例:
Connect-AzAccount # 直接在SQL服务器的master库执行创建登录名语句 Invoke-AzSqlServerExecute ` -ResourceGroupName "你的资源组名称" ` -ServerName "你的Azure SQL服务器名" ` -Query "CREATE LOGIN [自定义登录名] WITH PASSWORD = '符合复杂度要求的密码'"
- Azure CLI示例:
az login az sql server execute \ --resource-group 你的资源组名称 \ --server 你的Azure SQL服务器名 \ --query "CREATE LOGIN [自定义登录名] WITH PASSWORD = '符合复杂度要求的密码'"
方案3:优先使用包含用户(无需登录名)
如果你的场景不需要创建服务器级别的登录名,仅需要账号访问业务库,可以直接在业务库创建包含用户,完全不需要访问master库,也可以规避USE语句限制:
-- 直接在业务库执行即可,无需操作master库 CREATE USER [自定义用户名] WITH PASSWORD = N'符合复杂度要求的密码'; -- 授予对应业务权限,示例为授予只读权限 ALTER ROLE db_datareader ADD MEMBER [自定义用户名];
内容的提问来源于stack exchange,提问作者property kpt
相关产品推荐
相关产品推荐

