これは馬鹿げた質問のようですが、いくつかの調査にもかかわらず、これに関する情報のみを見つけることができませんでした(おそらく間違った用語を使用したため)。
複数のサーバーログイン(SQLサーバー認証)を1つのデータベースユーザー(データベースロールのメンバーとして割り当てられたアクセス許可を持つ)に記録することはできますか?
中央データベースから1つの設定を読み取る必要がある数十のSQLログイン(SQLサーバー認証)があり、ログインごとに独自のDBユーザーを作成するのではなく、これらのすべてのログインをターゲットデータベースの単一のDBユーザーにマップします。
はいの場合、正しいT-SQL構文は何ですか?
まず、用語を確認します。ログインはインスタンスレベルのセキュリティプリンシパル(sys.server_principals
)であり、ユーザーはデータベースレベルのセキュリティプリンシパル(sys.database_principals
)です。それらは、SID(セキュリティ識別子)によって結合されます。上記のシステムビューを見ると、SIDによって1:1形式で結合されていることがわかります。これは、データベース内の1ユーザーへの1ログインです。ログインは複数のユーザーを持つことができますが、それらは異なるデータベースにある必要があります。
そのため、アクセスしたいログインごとにデータベースにユーザーを作成する必要があります。これは十分に単純なコマンドです。
CREATE USER [UserName] FROM LOGIN [LoginName]
そこから、すべてのユーザーを1つ(または複数)の役割に割り当てることができます。ロールは、権限を持ち、それらの権限を各ユーザー(データベースロールの場合)またはログイン(たとえばロール)と共有するコンテナです。 db_datareader
と呼ばれる組み込みのデータベースロールがあり、データベース内のすべてのテーブルとビューへの読み取りアクセスを提供します。すべてのユーザーをそのロールに追加できます。ただし、より良いアイデアは、新しいロールを作成し、それをdb_datareader
ロールに追加することです。次に、すべてのユーザーを新しいロールに追加します。ここでの利点は、グループに追加のアクセス許可を追加する場合は、ロールのアクセス許可を変更するだけでよいことです。
次の方法で役割を作成します。
CREATE ROLE RoleName
ユーザーを役割(または1つの役割を別の役割)に追加する
EXEC sp_addrolemember 'RoleName','UserName'
または、2012年以降の場合
ALTER ROLE [RoleName] ADD MEMBER [UserName]