複数のサーバーログインの1人のデータベースユーザーへのマッピング


11

これは馬鹿げた質問のようですが、いくつかの調査にもかかわらず、(おそらく間違った用語を使用したために)これに関する情報を見つけることができませんでした。

複数のサーバーログイン(SQLサーバー認証)を単一のデータベースユーザー(データベースロールのメンバーとして割り当てられたアクセス許可を持つ)に記録することはできますか?

中央データベースから1つの設定を読み取る必要がある数十のSQLログイン(SQLサーバー認証)があり、ログインごとに独自のDBユーザーを作成するのではなく、これらのすべてのログインをターゲットデータベースの単一のDBユーザーにマッピングしたいと思います。

はいの場合、正しいT-SQL構文は何ですか?


「サーバーログオン」とは、WindowsアカウントまたはSQLサーバーアカウントのことですか。
Phil Sumner

SQLサーバーアカウントについて話しています。明確にするために質問を編集します
leepfrog、2014年

を作成してROLEから、ユーザーをロールに追加します。この方法では、ロールに権限を付与するだけです。これは、より良い方法でセキュリティを管理するのに役立ちます。また、SQLサーバーのバージョンは何ですか-2008R2、2012?
Kin Shah

回答:


19

まず、用語を確認します。ログインはインスタンスレベルのセキュリティプリンシパル(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]

詳細な説明と背景情報を提供してくれたケネスに感謝しましたThat's 1 Login to 1 User in a database
leepfrog、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.