SQL Serverと違い、Azure SQL DatabaseではGUIによるユーザー追加ができません。ユーザー追加のためにはTransact SQLを使用する必要があります。
本記事では、Azure SQL Databaseでユーザーを追加する方法について解説します。
Azure SQL Databaseの基本知識
Azure SQL Databaseについて
Azure SQL Databaseは、Azureで提供されるデータベースのPaaS版サービスです。
基本的な概念は通常のSQL Serverと一緒で、SQL Server Management Studio(SSMS)やAzure Data Studioといったツールを使って接続が可能です。
Azure SQL Databaseのデプロイ時には、論理 SQLサーバーも一緒に作成する必要があります。論理 SQLサーバーはAzure SQL Databaseを管理する論理的なグループであり、認証やネットワーク制御の機能を提供するリソースです。
ログインとデータベースユーザーについて
ログインは、Azure SQL Databaseの論理サーバーに対する認証とアクセスを管理するための概念で、masterデータベースに作成します。
データベースユーザーは、特定のデータベース内でのアクセスと操作を許可するためにデータベースレベルで定義される概念です。データベースユーザー作成後にログインと紐づけることで、そのログインを使用してAzure SQL Databaseに接続したときに、データベース内で操作を行うことができるようになります。
また、ログインに対し複数のデータベースユーザーは複数紐づけられますが、1つのデータベースユーザーに対しては、複数のログインを紐づけることはできません。
ユーザー追加手順
実際にユーザーを追加していきます。
以下の手順は、サーバー管理者アカウントを使用し、SSMSを使用して接続することを前提としています。
今回は、以下の要件を満たすユーザーを追加します。
- データベースに対するすべての操作が可能
- 他のユーザーを追加することが可能
※今回は業務の中で上記要件を満たすユーザーを追加したため手順を紹介していますが、基本的には「最小特権の原則(POLP)」に従い、必要なタスクを実行できる最低限の権限を付与することが重要です。
ログインの追加
まずはログインを作成していきます。
1. SSMSを使用し、管理者ログインで論理SQL Serverに接続します。
2. master DBでログインを作成します。
CREATE LOGIN "Login_Name"
WITH PASSWORD = 'password'
以上でログインの追加は完了です。
データベースユーザーの追加
次に、データベースユーザーを作成していきます。
1. ユーザーデータベースを選択し、データベースユーザーを作成します。
- FOR LOGINにより、作成したログインと紐づけを行います。
- EXEC sp_addrolememberにより、データベースユーザーに権限を付与します。今回はデータベースに対しすべての操作が可能である要件があるため、db_ownerロールを付与します。
CREATE USER "DBUser_Name"
FOR LOGIN "Login_Name"
EXEC sp_addrolemember N'db_owner', N'DBUser_Name'
2. ユーザーデータベースにデータベースユーザーが作成されたことを確認します。
SELECT name FROM sys.database_principals WHERE type = 'S';
基本的にはここまでで、特定のデータベースを操作可能なユーザーは作成完了です。
以降の手順は、今回の要件である「他のユーザーを追加することが可能」を満たすために必要な手順となります。
3. masterデータベースを選択し、データベースユーザーを作成します。FOR LOGINで作成したログインを指定し紐づけます。
CREATE USER "MasterUser_Name"
FOR LOGIN "Login_Name"
4. masterデータベースにデータベースユーザーが作成されたことを確認します。
SELECT name FROM sys.database_principals WHERE type = 'S';
5. masterデータベースを選択し、作成したデータベースユーザーへ権限を付与します。
- grant alter any userにより、ユーザーにALTER ANY USER 権限が与えられ、他のユーザーの設定(ロールの割り当てや権限)を変更できるようになります。
- alter role~ADD Memberにより、ユーザーをloginmanagerロールのメンバーとして追加します。loginmanagerは、ログインの作成や削除ができるようになるロールです。
grant alter any user to "MasterUser_Name"
alter role loginmanager ADD member "MasterUser_Name"
6. ユーザーデータベースを選択し、データベースユーザーへ、ユーザー管理用の権限を付与します。
grant alter any user to "DBUser_Name"
作成したユーザーでDBへ接続
1. SSMSの[サーバーへの接続]にて、作成したログインとそのパスワードを指定します。
2. データベースに接続ができました。masterデータベース、ユーザーデータベースを確認できています。
3. 付与した権限通りユーザーを追加できるか確認します。masterデータベースを選択し、ログインを作成します。
CREATE LOGIN "Login_Name"
WITH PASSWORD = 'password'
4. ユーザーデータベースを選択し、データベースユーザーを作成します。※権限は適当なものを付与します。
CREATE USER "DBUser_Name"
FOR LOGIN "Login_Name"
EXEC sp_addrolemember N'db_datareader', N'DBUser_Name'
5. 想定通りに作成されていますね!
↓ログイン
↓データベースユーザー
おわりに
この記事では、Azure SQL Databaseにユーザーを追加する手順をまとめました。
今回はイレギュラーな権限を付与したユーザーを追加していますが、実際にユーザーを追加する際は必要に応じて適切に権限を設定してください。