ここでは、Cloud SQL による SQL Server のユーザーとロールの処理方法について説明します。SQL Server のロールを使用すると、SQL Server インスタンスにアクセスするユーザーのアクセスと機能を制御できます。
Cloud SQL ユーザーの作成と管理について詳しくは、ユーザーを作成して管理するをご覧ください。
SQL Server のロールとユーザー
SQL Server のロールは、単一のロールにすることも、複数のロールをグループとして機能させることもできます。
ユーザーとは、ログインする機能を持つロールです(ロールには LOGIN
権限があります)。Cloud SQL で作成されたすべてのロールには LOGIN
権限があるため、Cloud SQL では「ロール」と「ユーザー」という言葉が同じ意味で使用されます。ただし、SQL Server と互換性のあるクライアント ツールでロールを作成した場合、そのロールは必ずしも LOGIN
権限を持つとは限りません。
Cloud SQL for SQL Server は、高度な権限を提供する特定のサーバーロールに対するアクセスを制限します。これらのロールの例としては、DbRootRole
、serveradmin
、securityadmin
、setupadmin
、diskadmin
、dbcreator
などがあります。
すべての SQL Server ユーザーにはパスワードが必要です。パスワードが設定されていないユーザーはログインできません。
スーパーユーザーとシステム ストアド プロシージャ
Cloud SQL for SQL Server はマネージド サービスであるため、高度な権限を必要とする特定のシステム ストアド プロシージャとテーブルにアクセスを制限します。Cloud SQL では、スーパーユーザー権限を持つユーザーの作成やそのようなユーザーへのアクセスはできません。
デフォルトの SQL Server ユーザー
新しい Cloud SQL for SQL Server インスタンスを作成すると、デフォルトの sqlserver
ユーザーが作成されますが、パスワードを設定する必要があります。
sqlserver
ユーザーは CustomerDbRootRole
ロールの一部であり、そのアクセス許可(特権)には次の権限が含まれます。
ALTER ANY CONNECTION
ALTER ANY LOGIN
ALTER ANY SERVER ROLE
ALTER SERVER STATE
ALTER TRACE
CONNECT SQL
CREATE ANY DATABASE
CREATE SERVER ROLE
VIEW ANY DATABASE
VIEW ANY DEFINITION
VIEW SERVER STATE
また、リンクされているサーバーで使用する場合は、cloudsql enable linked servers
をインスタンスに追加することもできます。このフラグは、サーバーに次の権限を付与します。
ALTER ANY LINKED SERVER
サーバー権限の付与
GRANT
コマンドを使用して権限を付与する場合は、grantor_principal
の値として CustomerDbRootRole
を渡す必要があります。
次の GRANT ALTER ANY LOGIN
の例は有効です。
GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole
次の GRANT ALTER ANY LOGIN
の例は無効です。
GRANT ALTER ANY LOGIN TO [Account]
その他の SQL Server ユーザー
他の SQL Server ユーザー(ロール)を作成できます。Cloud SQL を使用して作成したすべてのユーザーには、sqlserver
ログインと同じデータベース権限が付与されます。ただし、(Cloud SQL を使用して作成するのではなく)別のプロセスでユーザーを作成した場合、そのユーザーは、顧客管理者アカウントや sqlserver
ユーザーと同じ権限を持ちません。たとえば、ログインの作成プロセスでログインを CustomerDbRootRole
サーバーロールに追加しても、ユーザーには、顧客管理者アカウントや sqlserver
ユーザーと同じ権限は付与されません。したがって、sqlserver
ログインと同じデータベース権限をユーザーに付与する場合は、Cloud SQL を使用してユーザーを作成できます。2 つのアカウント間の権限の違いを確認するには、sys.fn_my_permissions 関数を使用します。
データベースのインポート: オーナー権限
データベースをインポートした場合、オーナーの処理方法は、オーナーの種類によって次のように異なります。
sa
以外の既存のログインの場合: Cloud SQL はそのオーナーを保持し、ログインsqlserver
にマッピングするsqlserver
というユーザーを作成します。 Cloud SQL は、そのsqlserver
ユーザーにCONTROL
権限とALTER ANY USER
権限を付与します。- 不明なログイン、またはシステムによって作成されたログインの場合: Cloud SQL は、データベースの所有権を
sqlserver
ログインに移行します。
ユーザー権限の変更
ALTER ROLE コマンドを使用すると、ユーザー権限を変更できます。クライアントで新しいユーザーを作成する場合は、別のロールに関連付けることも、別の権限を付与することもできます。
トラブルシューティング
データベースへのアクセスエラー
作成したデータベースにアクセスしようとすると、作成したユーザーとして、次のエラーが表示されます。
The server principal USERNAME is not able to access the database DATABASE_NAME under the current security context.
次のような問題が考えられます
ユーザーがデータベースのメンバーではありません。
次の方法をお試しください
sqlserver
ユーザーとしてデータベースに接続し、新しいユーザーを追加してから、データベースの新しいユーザーに db_owner
のロールを付与します。次に例を示します。
EXEC sp_adduser 'user'; EXEC sp_addrolemember 'db_owner', 'user'