当我创建一个新数据库并执行SELECT user
时,它返回我的用户是dbo
。
所以我创建了一个新用户并执行用户创建的代码。但是当试图再次将其更改为dbo
时,它会抛出一个它不存在的错误,但我可以看到它。为什么会这样?我执行错误了吗?
CREATE USER TestUser WITHOUT LOGIN
SELECT user --Returns dbo
SELECT * FROM sys.database_principals --I can see both, dbo and TestUser and some other users of the system
EXECUTE AS user = 'TestUser'
SELECT user --Returns TestUser
EXECUTE AS user = 'dbo'; -- Says that it doesn't exist
抛出错误:
无法作为数据库主体执行,因为主体" dbo" 不存在,这种类型的委托人不能被冒充,或者你 没有许可。
使用Microsoft SQL Server Management Studio 14.0.17119.0
答案 0 :(得分:4)
因为"您没有权限"。以EXECUTE AS
作为新用户完成后的 Everything ,包括尝试模拟新用户,TestUser
,而不是系统管理员,无法模拟dbo
。而是REVERT
。
答案 1 :(得分:1)
密钥在错误消息“此类主体不能被模拟”。基本上,用户'dbo'应被视为别名或角色(数据库所有者)。因此,当您使用登录名创建数据库/表/ etc时,您具有数据库所有者权限。例如,如果以用户'sa'身份登录并创建表,则完整限定表名称为DataBaseName.dbo.TableName。
为什么你需要执行'dbo'?最好不要将数据库所有者权限分配给一堆用户,而是保持用户/角色/权限的隔离。