列出映射到一个特定数据库上的登录的用户

时间:2015-03-05 10:06:44

标签: sql sql-server database login

我带着SQL用户/登录问题回到这里。 首先,我在SQL Server 2008上工作,而且我不是该服务器上的主服务器。 在那个SQL服务器上我有不同的Login,这些Login被映射到USER到我的数据库' DB_MyDataBase'。 实际上,我有10个不同的登录映射到我的数据库中的10个不同用户' DB_MyDataBase'。

因为,当我使用Login' Laurent'连接到SQL服务器时,那个SQL登录' Laurent'是用户'劳雷尔'在我的数据库' DB_MyDataBase'。目前,没问题。 但是现在对于那10个不同的登录并希望知道他们各自的USER用于我的数据库' DB_MyDataBase'。

经过一番研究后,我发现了一项可以做"工作的请求"

sp_msloginmappings 'Laurent', 1

通常情况下,该用户帐户信息显示在当前数据库上下文中,用于登录帐户' Laurent' 但是当我尝试它时,我收到了一条错误消息。

Nom d'objet 'dbo.syslogins' non valide.

对于非法国用户,错误消息为:Object name 'dbo.syslogins' is not valid

我找到了另一个有效的请求"一点"。

SET NOCOUNT ON
CREATE TABLE #temp
    (
      SERVER_name SYSNAME NULL ,
      Database_name SYSNAME NULL ,
      UserName SYSNAME ,
      GroupName SYSNAME ,
      LoginName SYSNAME NULL ,
      DefDBName SYSNAME NULL ,
      DefSchemaName SYSNAME NULL ,
      UserID INT ,
      [SID] VARBINARY(85)
    )

DECLARE @command VARCHAR(MAX)
--this will contain all the databases (and their sizes!)
--on a server
DECLARE @databases TABLE
    (
      Database_name VARCHAR(128) ,
      Database_size INT ,
      remarks VARCHAR(255)
    )
INSERT  INTO @databases--stock the table with the list of databases
        EXEC sp_databases

SELECT  @command = COALESCE(@command, '') + '
USE ' + database_name + '
insert into #temp (UserName,GroupName, LoginName,
                    DefDBName, DefSchemaName,UserID,[SID])
     Execute sp_helpuser
UPDATE #TEMP SET database_name=DB_NAME(),
                 server_name=@@ServerName
where database_name is null
'
FROM    @databases
EXECUTE ( @command )

SELECT  loginname ,
        UserName ,
        Database_name
FROM    #temp
WHERE   LoginName = 'Laurent' 

因此,一个人正在努力列出所有映射到每个数据库上的登录的用户BUT(总有一个"但是" ...)它只能使用登录我用来连接。

对于ie当我使用Login' Laurent'连接到SQL服务器时之前的请求正在运行,因为我请求我用来连接到SQL服务器的相同登录但是当我连接到Login' Laurent'并使用不同的登录执行上一个请求(不是' Laurent'而是另一个用户将用户映射到我的数据库' DB_MyDataBase'。)我什么也看不见,它给我留空栏.... 也许是因为我不是那个SQL服务器上的主人。

那么我如何列出用户映射到不同于我连接的登录?

我希望我的问题足够清楚(对于长篇文章感到抱歉)并感谢您将来的回答。如果您需要更多信息来回答我,请不要犹豫,问我。

1 个答案:

答案 0 :(得分:0)

您可以看到的内容取决于您登录的用户的权限。如果您拥有必要的权限,则针对security catalog views中的两个的此查询应该为您提供所需的内容。

select
    dp.name as UserName,
    sp.name as LoginName
from
    sys.database_principals dp
        left join sys.server_principals sp on sp.sid = dp.sid
where
    dp.type in ('S', 'U')