のローカル インスタンスを実行していますSQL Server 2012
。
カスタム ロールを作成しました。
CREATE ROLE [my_user] AUTHORIZATION [dbo]
すべてのユーザー (ローカルの Windows ユーザーと SQL ユーザー) に対して、データベースにこのロールを (User Mappings
設定で) 指定しました。したがって、次のクエリは 1 を返す必要があります。
SELECT IS_ROLEMEMBER('my_user')
私の Windows 認証ユーザーの場合、実際には 1 が返されますが、SQL ユーザーとしてログオンするとすぐに 0 が返されます。SQL ユーザーが実際にこの役割を持っていることを 3 回確認しました。ここで何が欠けていますか?
アップデート
さらにいくつかのテストを実行しました。これは確かに奇妙な動作です。次の手順を実行しました。
- 私のローカルでは、 user
SQL Server
でデータベースを作成しました。ロールが追加されました。test
sa
my_user
- としてログオンし、
sa
この役割Management Studio
に追加されました。MYDOMAIN\MyUser
- Windows認証で再ログオンし、実行し
IS_ROLEMEMBER('my_user')
ました。0 を返します。 sa
(ユーザー名を指定して) と Windows ユーザーの両方を使用してクエリを試行しました。同じ問題。- 念のため再起動してみ
SQL Server
ました。
これは意味がありません!ロールを右クリックすると、自分の Windows ユーザーが実際にロールのメンバーであることがわかります。IS_ROLEMEMBER
機能がおかしい!次のクエリを実行すると、ユーザーが実際にデータベース ロールのメンバーであることが示されます。
SELECT
USER_NAME(memberuid), USER_NAME(groupuid)
FROM
sys.sysmembers
WHERE
USER_NAME(groupuid) = 'my_user'
これは私のメンバーシップも示しています:
select r.name as role_name, m.name as member_name from sys.database_role_members rm
inner join sys.database_principals r on rm.role_principal_id = r.principal_id
inner join sys.database_principals m on rm.member_principal_id = m.principal_id
いくつかの追加情報:
- ドメインに参加していますが、現在切断されています。ただし、接続時にもこの問題が発生しました。
- Windows 8.1 64 ビットを実行しています。
更新 2
一部の人が示唆しているようにプリンシパルを明示的に指定すると、次のエラーが発生します (executing as sa
):
SELECT IS_ROLEMEMBER('my_user', 'MYDOMAIN\UserX')
Msg 15404, Level 16, State 19, Line 1
Could not obtain information about Windows NT group/user 'MYDOMAIN\UserX',
error code 0x54b.
同じ問題が発生している可能IS_ROLEMEMBER
性がありますが、エラーは出力されませんか?