RDS SQLServer のユーザーとロールの関係
データベース管理
基本
データベースを扱う上で、最初に確認しておくべきは、ユーザー・ロールの仕組みです。
インスタンス、データベース、スキーマ、テーブルとの関係です。
これらの関係性を理解していれば、自ずとユーザーや権限管理のベストプラクティスが見えてきます。
インスタンス・データベース・スキーマ・テーブルの関係
SQLServer におけるインスタンス・データベース・スキーマ・テーブルの関係はこちらです。
PostgreSQL と同様ですね。スキーマは自在に作成することが出来て、スキーマオーナーも自由に指定できます。
ユーザー・ロールの関係
SQLServer のユーザー・ロールの仕組みは複雑です。難しくしているのは、SQLServer のユーザーの概念です。
SQLServer には2つの次元のユーザーが存在します。サーバーユーザー(Logins)と、データベースユーザー(Users)です。
その関係性を示したのが以下の図です。
上記の図のサーバーユーザー(Logins)とデータベースユーザー(Users)の関係性は以下です。
例えば、このインスタンスにサーバーユーザー(Logins)の user01 でログインした場合は、
- データベース1に接続するときは db01-user01 として振る舞う
- データベース2に接続するときは db02-user01 として振る舞う
- データベース1に接続するときは db01-user02 として振る舞う
- データベース2には接続できない
となります。
ロールの設定
図で言うところのサーバーロールと、データベースロールが存在します。
サーバーロールはサーバーユーザー(Logins)に対して付与できるロールです。
データベースロールはデータベースユーザー(Usersに対して付与できるロールです。
SQLServer の基本仕様
ユーザーの基本仕様
SQLServer には以下のような仕様があります。
- インスタンスに接続する際は、サーバーユーザー(Logins)で接続
- サーバーユーザー(Logins)と各データベースユーザー(Users)は1対1
- データベースユーザー(Users)作成時は、サーバーユーザー(Logins)に紐づけが必須
サーバーユーザー(Logins)を使用して SQLserver のインスタンスに接続すると、自動的に各データベースのユーザーがマッピングされているイメージです。
つまり、SQLserver にログインした後は、認証なしでマッピングされたデータベースユーザーでデータベースに接続ができます。
MS ドキュメントとの格闘
分かってしまえば、まったく難しい内容ではありません。
しかしながら、MSドキュメントは本当に読んでも理解に苦しみます。
良かったら、SQLServer のアクセス認証を読んでみてください。
Icons made by Flat Icons from www.flaticon.com