db_owner
权限是否足以执行sp_changedbowner
?
我希望更改RDS SQL实例的数据库所有者。我是DB的所有者,仍然不能作为主用户执行sp_changedbowner
。
我想知道执行sp_changedbowner
或ALTER AUTHORIZATION
命令的最低权限是什么。
发布于 2017-09-30 02:25:42
我将用一个演示来展示这个。很可能在您的情况下,您缺少了CONTROL SERVER
特权。
有关这一主题的好读物将是:
基本的服务器安全概念:所有权、控制权、所有权:Laurentiu Cristofor
在具有sysadmin特权的帐户下运行以下代码。
USE [master];
GO
--creating a new database
CREATE DATABASE [testpermission];
GO
--creating a SQL login
CREATE LOGIN [ownerone] WITH PASSWORD=N'ownerone', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO
--making the new user owner of database
USE [master]
GO
ALTER AUTHORIZATION ON DATABASE::testpermission TO ownerone;
GO
--checking the new owner
SELECT suser_sname(owner_sid) FROM sys.databases WHERE NAME = 'testpermission';
GO
您将看到新的所有者名为ownerone
。
现在创建另一个登录名。
USE [master]
GO
CREATE LOGIN [newowner] WITH PASSWORD=N'newowner', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO
现在以ownerone
身份登录并执行下面的语句,以赋予newowner
所有权。
ALTER AUTHORIZATION ON DATABASE::testpermission TO newowner;
您将得到以下错误消息:
Msg 15151,级别16,状态1,第1行找不到主体'newowner',因为它不存在,或者您没有权限。
授予ownerone
登录CONTROL SERVER
权限。
USE [master]
GO
GRANT CONTROL SERVER TO [ownerone];
GO
重复以下操作,现在您将能够将所有权更改为newowner
。
ALTER AUTHORIZATION ON DATABASE::testpermission TO newowner;
清理代码。
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'testpermission'
GO
USE [master]
GO
DROP DATABASE [testpermission]
GO
DROP LOGIN [newowner]
GO
DROP LOGIN [ownerone]
GO
https://dba.stackexchange.com/questions/187302
复制相似问题