読み取り専用アカウントを作成するには
SQLコマンドの場合
CREATE LOGIN read_only_user WITH PASSWORD = 'password!';
USE 対象データベース名;
CREATE USER read_only_user FOR LOGIN read_only_user;
-- db_datareaderロールのみ付与でSELECT権限を与える
ALTER ROLE db_datareader ADD MEMBER read_only_user;
-- db_denydatawriter も付与することで、誤ってINSERT/UPDATE/DELETE権限が付与されるのを防げる
ALTER ROLE db_denydatawriter ADD MEMBER read_only_user;
GUIからの場合
アカウントの作成
SSMSでサーバーに接続
「セキュリティ」→「ログイン」右クリック→「新しいログイン」
ログイン名、認証方式(SQL Server認証 or Windows認証)、パスワードを設定
アカウントに権限設定
「ログイン」作成後、「ユーザーマッピング」タブで対象データベースを選択
「データベース ロールメンバシップ」で
「db_datareader」(読み取り専用)
「db_denydatawriter」(書き込み禁止)
をチェックしてOK
- SSMS (SQL Server Management Studio) は GUI管理ツール
- コマンドラインだと sqlcmd
読み取り専用アカウントでかつ参照できるカラムを制限したい
CREATE LOGIN read_only_user WITH PASSWORD = 'password!';
USE 対象データベース名;
CREATE USER read_only_user FOR LOGIN read_only_user;
GRANT SELECT ON dbo.テーブル名1 TO read_only_user;
GRANT SELECT ON dbo.テーブル名2 TO read_only_user;
-- 必要なテーブル分繰り返す
不要な権限の付与を避ける。
db_datareaderロールを付与すると「全テーブル参照可能」になるため、付与しない。
INSERT/UPDATE/DELETEなどの権限は何も付与しなければ、デフォルトで持たない。
(必要に応じて)他のオブジェクトの権限も調整
ビューやストアドプロシージャ等も必要に応じて個別にGRANTする。
CPU使用率の制限 (Enterprise Editionで利用可能)
-- CPU10%までのリソースプール作成
CREATE RESOURCE POOL ReadOnlyPool WITH (MAX_CPU_PERCENT = 10);
-- グループ作成
CREATE WORKLOAD GROUP ReadOnlyGroup USING ReadOnlyPool;
-- ログイン名で所属グループ判定
CREATE FUNCTION dbo.MyClassifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
IF ORIGINAL_LOGIN() = N'read_only_user'
RETURN N'ReadOnlyGroup';
RETURN N'default';
END;
-- Resource Governorに分類子関数を設定
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.MyClassifier);
ALTER RESOURCE GOVERNOR RECONFIGURE;
- リソース ガバナーは、SQL Serverでユーザーやアプリケーションごとのクエリが使用できるCPU、メモリ、物理I/Oなどのリソース量を「予約」または「制限」できる機能。
- SQL Server Enterprise Editionで利用可能 (SQL Server Standard Editionでは利用できない。)