Google Cloud SQL 从.BAK文件恢复的数据库无法修改DB所有者问题
解决方案
首先明确:Google Cloud SQL for SQL Server属于托管实例,默认的sqlserver账号未开放sysadmin权限,部分服务器级ALTER权限默认被DENY是平台的安全限制,无法直接通过SQL命令自行赋权,需通过GCP的实例管理通道操作,具体可按以下步骤尝试:
步骤1:确认mydb_adm登录名的创建渠道
如果你是直接在SQL Server中通过CREATE LOGIN命令创建的mydb_adm,需要先删除该登录名,改为通过Google Cloud Console/ gcloud命令创建实例级用户:
- 登录Google Cloud Console,进入对应Cloud SQL实例的「用户」页面
- 点击「添加用户账号」,选择「内置用户」,输入用户名
mydb_adm和对应密码后保存
通过该方式创建的登录名会被平台权限体系认可,避免后续权限校验异常。
步骤2:为sqlserver账号授予更高管理角色
默认sqlserver账号的权限不足以修改数据库所有者,需要通过gcloud命令为其授予cloudsqlsuperuser角色:
gcloud sql users update sqlserver \ --instance=你的Cloud SQL实例名称 \ --role=cloudsqlsuperuser
执行完成后等待1-2分钟让权限同步,再重新连接实例执行修改所有者的命令:
ALTER AUTHORIZATION ON DATABASE::mydb TO mydb_adm;
备选方案:备份恢复时直接指定所有者
如果上述操作仍有问题,可重新执行备份恢复流程,在恢复命令中直接指定所有者:
- 先删除已恢复的
mydb数据库 - 执行恢复命令时添加所有者参数:
RESTORE DATABASE mydb FROM DISK = '你的备份文件路径' WITH MOVE 'mydb' TO 'D:\mssql\data\mydb.mdf', MOVE 'mydb_log' TO 'D:\mssql\log\mydb_log.ldf', OWNER = 'mydb_adm';
内容的提问来源于stack exchange,提问作者bdcoder
相关产品推荐
相关产品推荐

