9

「MYDOMAIN\DomainUsers」というログインおよびデータベースユーザーを作成しました。ログオンしているドメインユーザーが持つ役割を見つける必要がありますが、現在のユーザーを取得するためのすべての呼び出しは、ドメインユーザー名を返します。「MYDOMAIN\username」はデータベースのユーザー名ではありません。例:「MYDOMAIN\DomainUsers」。

たとえば、このクエリは「MYDOMAIN\username」を返します

select original_login(),suser_name(), suser_sname(), system_user, session_user,  current_user, user_name()

そして、このクエリは0を返します

select USER_ID()

ユーザー名にdatabase_role_membersを照会したいのですが、それを返す関数や、現在のユーザーの役割を取得できる他の方法はありますか?

4

1 に答える 1

12

ドメインユーザーのログインがADグループにマッピングされていることを理解しましたか?

ユーザーは複数のADグループに属する可能性があり、それぞれがデータベースに何らかの形でマッピングされる可能性があることを覚えておく必要があります。これは少し面倒な場合があります。また、それはあなたが複数の結果を持つ何かを必要とすることを意味します:)

これを試して:

select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1

特定のユーザーに関連付けられるすべてのWindowsグループログインを適切に取得する必要があると思います。その後、データベースユーザーのために参加できます。

Select u.name from YourDB.sys.syslogins l
inner join YourDB.sys.sysusers u
on l.sid = u.sid
where l.loginname = ANY (select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1)

単一の値ではなく、セット全体を処理する必要がある場合があることを覚えておく必要があります。

于 2013-12-09T15:46:28.220 に答える