该登录名已有一个不同用户名的帐户

Jac*_*ack 33 security sql-server logins

当我执行此 SQL 时:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

该登录名已有一个使用不同用户名的帐户。

我怎么知道我的登录帐户的这个不同的用户名是什么?

Mar*_*ian 34

这意味着登录 [R2Server\AAOUser] 已经映射到该数据库中的用户。或者,换句话说,另一个数据库用户正在使用此登录名。您可以通过以下查询查看哪个数据库用户正在使用您的登录信息:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login
Run Code Online (Sandbox Code Playgroud)

PS:不使用兼容性视图的脚本版本:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login
Run Code Online (Sandbox Code Playgroud)

  • 您是否使用该登录名创建了数据库以连接到服务器?如果是,那么您就是它的数据库所有者,不需要创建另一个用户。你已经准备好了。 (4认同)
  • 我会使用`sys.server_principals` 和`sys.database_principals`。`sysusers` 和 `syslogins` 只是为了向后兼容。 (4认同)