SQL Server ユーザーについて

ここでは、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 は、高度な権限を提供する特定のサーバーロールに対するアクセスを制限します。これらのロールの例としては、DbRootRoleserveradminsecurityadminsetupadmindiskadmindbcreator などがあります。

すべての 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'

次のステップ