!!!Microsoft SQL Server 権限付与 {{category SQL Server,nolink}}権限付与のメモ * GRANT オブジェクト権限 (Transact-SQL) - SQL Server | Microsoft Learn ** https://learn.microsoft.com/ja-jp/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-ver17 * GRANT (スキーマ権限の許可) (Transact-SQL) - SQL Server | Microsoft Learn ** https://learn.microsoft.com/ja-jp/sql/t-sql/statements/grant-schema-permissions-transact-sql?view=sql-server-ver17 * GRANT (データベースの権限の許可) (Transact-SQL) - SQL Server | Microsoft Learn ** https://learn.microsoft.com/ja-jp/sql/t-sql/statements/grant-database-permissions-transact-sql?view=sql-server-ver17 !! 権限確認 !! ストアド プロシージャ・関数(ファンクション)の実行 参照ユーザ(sysadmin サーバロールや db_owner データベース ロール を持たない)は、各データベースのストアド・ファンクションの実行権限がない。 そのため、実行権限(EXECUTE)の付与が必要となる。 use [db name] GO GRANT EXECUTE ON [dbo].[Function or StoredProcedure] TO [user name] GO ! ストアドに権限を付与する USE 《db name》; GRANT EXECUTE ON OBJECT::《schema name》.《object name》 TO 《user name》; GO ! スキーマのすべてのストアドに権限を付与する MSSQL は、スキーマに権限付与することで、再帰的にその中のオブジェクトに自動的に権限が継承される。 ただ、不要な権限を与えないよう、必要なプロシージャのみに絞って権限付与することが推奨される。 USE 《db name》; GRANT EXECUTE ON SCHEMA::《schema name》 TO 《user name》; GO ! データベース ロール で、すべてのストアドの権限を付与する 固定データベース ロール db_datareader と同じようにデータベース内すべてを対象にする(やりすぎな気はする)。で、そのロールにユーザをメンバー追加する。 USE ; CREATE ROLE db_executor; GRANT EXECUTE ON DATABASE:: TO db_executor; ALTER ROLE db_executor ADD MEMBER [user name]; !! 利用状況モニターに必要な権限付与 DBA権限(sysadmin サーバロール)を持たないユーザで、SQL Server Management Studio (SSMS) の「利用状況モニター」を使用するのに必要な権限 「VIEW SERVER STATE」および「VIEW SERVER PERFORMANCE STATE」(MSSQL 2022以降) USE master; GRANT VIEW SERVER STATE TO [user name]; GRANT VIEW SERVER PERFORMANCE STATE TO [user name]; GO ※データファイルIO などは、さらに別の権限が必要。 ※2022以降は、SERVER PERFORMANCE STATE ってあったけど、エラーになった気がする… !! 実行計画 SHOWPLAN