RDS SQLServer のユーザーとロールの関係

  • RDS
  • SQLServer
  • AzureDataBase
  • スポンサーリンク

    データベース管理

    基本

    データベースを扱う上で、最初に確認しておくべきは、ユーザー・ロールの仕組みです。

    インスタンス、データベース、スキーマ、テーブルとの関係です。

    これらの関係性を理解していれば、自ずとユーザーや権限管理のベストプラクティスが見えてきます。

    インスタンス・データベース・スキーマ・テーブルの関係

    SQLServer におけるインスタンス・データベース・スキーマ・テーブルの関係はこちらです。

    aws-sqlserver-role-02

    PostgreSQL と同様ですね。スキーマは自在に作成することが出来て、スキーマオーナーも自由に指定できます。

    ユーザー・ロールの関係

    SQLServer のユーザー・ロールの仕組みは複雑です。難しくしているのは、SQLServer のユーザーの概念です。

    SQLServer には2つの次元のユーザーが存在します。サーバーユーザー(Logins)と、データベースユーザー(Users)です。

    その関係性を示したのが以下の図です。

    aws-sqlserver-role-01

    上記の図のサーバーユーザー(Logins)とデータベースユーザー(Users)の関係性は以下です。

    例えば、このインスタンスにサーバーユーザー(Logins)の user01 でログインした場合は、

    • データベース1に接続するときは db01-user01 として振る舞う
    • データベース2に接続するときは db02-user01 として振る舞う
    ということになります。 user02 でログインした場合は、
    • データベース1に接続するときは db01-user02 として振る舞う
    • データベース2には接続できない

    となります。

    ロールの設定

    図で言うところのサーバーロールと、データベースロールが存在します。

    サーバーロールはサーバーユーザー(Logins)に対して付与できるロールです。

    データベースロールはデータベースユーザー(Usersに対して付与できるロールです。

    SQLServer の基本仕様

    ユーザーの基本仕様

    SQLServer には以下のような仕様があります。

    • インスタンスに接続する際は、サーバーユーザー(Logins)で接続
    • サーバーユーザー(Logins)と各データベースユーザー(Users)は1対1
    • データベースユーザー(Users)作成時は、サーバーユーザー(Logins)に紐づけが必須

    サーバーユーザー(Logins)を使用して SQLserver のインスタンスに接続すると、自動的に各データベースのユーザーがマッピングされているイメージです。

    つまり、SQLserver にログインした後は、認証なしでマッピングされたデータベースユーザーでデータベースに接続ができます。

    自動マッピングがなされる理由とは

    他のメジャーな RDBMS とは全く異なるところが、このユーザーのマッピング機能です。

    なぜ、このような仕様となっているかというと、SSMS の GUI 操作を前提としていることが考えられます。

    SSM のログイン画面はこちらです。

    title

    おそらく複数のデータベースに対して GUI 簡単に操作ができるよう工夫されているのでしょう。

    このサーバーユーザー(Logins)でログインした後、各データベースユーザーへの接続情報入力が不要であれば、操作が捗りますよね。

    MS ドキュメントとの格闘

    分かってしまえば、まったく難しい内容ではありません。

    しかしながら、MSドキュメントは本当に読んでも理解に苦しみます。

    良かったら、SQLServer のアクセス認証を読んでみてください。

    Icons made by Flat Icons from www.flaticon.com

  • RDS
  • SQLServer
  • AzureDataBase
  • スポンサーリンク