SQL Database のログインとユーザーの権限管理について少しまとめてみたいと思います。
基本的な情報については Windows Azure SQL データベースにおけるデータベースとログインの管理 が参考になります。
■ログインとサーバーロール
SQL Database は SQL Server とログインとユーザー管理の基本的な考えは同じです。
サーバーに接続するためにはログインが必要となります。
そのログインに対してサーバーレベルの権限を付与していきますが、SQL Database と SQL Server では用意されている固定サーバーロールが異なってきます。
SQL Database ではサーバーレベルの権限 (サーバーロール) は以下の 2 種類が用意されています。
- loginmanager
- dbmanager
SQL Database サーバーレベルの権限は、ログインの管理 / データベースの管理の 2 種類を設定することになります。
DB 作成時に設定したログインについてはこの 2 種類の権限が付与されている状態になるかと。
このあたりの権限は管理者用のものになりますのでアプリケーションで使用するログインについてはこのあたりの権限は設定する必要はないかと。
■ユーザーとデータベースロール
データベースのオブジェクトに対しての権限はログインをマッピングしたユーザーに対して付与することになります。
データベースレベルで設定できるユーザーの権限については SQL Server と同一になってきます。
設定できる権限は 部分的にサポートされる Transact-SQL ステートメント (Windows Azure SQL データベース) の GRANT / DENY / REVOKE を確認するとよいかと思います。
- DENY (データベースの権限の拒否) (Windows Azure SQL データベース)
- DENY (データベース プリンシパルの権限の拒否) (Windows Azure SQL データベース)
- DENY (型の権限の拒否) (Windows Azure SQL データベース)
- GRANT (データベースの権限の許可) (Windows Azure SQL データベース)
- GRANT (データベース プリンシパルの権限の許可) (Windows Azure SQL データベース)
- GRANT (型の権限の許可) (Windows Azure SQL データベース)
- REVOKE (データベースの権限の取り消し) (Windows Azure SQL データベース)
- REVOKE (データベース プリンシパルの権限の取り消し) (Windows Azure SQL データベース)
- REVOKE (型の権限の取り消し) (Windows Azure SQL データベース)
細かな権限設定については SQL Server の方を見る形になります。
ユーザーに対して直接権限を付与すると管理が大変になるかもしれませんので、データベースロールに対して付与していくことも考慮したほうがよいかと思います。
SQL Database では CREATE ROLE がサポートされています。
サポートされている Transact-SQL ステートメント (Windows Azure SQL データベース)
これにより 固定データベースロール だけでなくユーザーが固有のデータベースロールを作成することができます。
作成したデータベースロールに対して権限を付与し、そのロールにユーザーを追加することで、デフォルトで用意されている固定ユーザーロール以外の権限をロールという管理単位で設定できるようになります。
以下は、データベースロールを作成してそのロールにユーザーを追加して、dbo のスキーマのストアドプロシージャの実行権限を付与するクエリになります。
CREATE ROLE DBRole |
[TO DBRole] ではなく [TO testuser] にすることでユーザーに対して dbo のスキーマの実行権限を付与することもできますが、実行権限を他のユーザーでも設定する可能性がある場合には、ロールを作成してそこに権限を付与したほうが管理はしやすくなります。
オブジェクトに個別に権限を付与すると、新規にオブジェクトを追加した場合に個別に権限を付与していかないといけないので、スキーマ単位に権限を付与してしまうと管理は楽かと思います。
SQL Database をアプリケーションで使用する場合には、データベース作成時に設定したログインではなく、新規に作成したログインを使用することになるかと思います。
このあたりのセキュリティの設定も考慮して効率の良い管理をできるようにしたいですね。