C# アプリケーションから SQL Server 2008 R2 データベースに接続する必要があります。接続には SQL Server 認証を使用する必要があります。
ユーザーがストアド プロシージャを作成/実行できるようにするために、ユーザーに必要なロールとスキーマは何ですか?
注: ストアド プロシージャは dbo スキーマにあります。
C# アプリケーションから SQL Server 2008 R2 データベースに接続する必要があります。接続には SQL Server 認証を使用する必要があります。
ユーザーがストアド プロシージャを作成/実行できるようにするために、ユーザーに必要なロールとスキーマは何ですか?
注: ストアド プロシージャは dbo スキーマにあります。
プロシージャの作成と実行の権限は、それぞれCREATE PROCEDURE
との下に記載されてEXECUTE
います。
重要な考慮事項の1つは、ユーザーがプロシージャで参照されるオブジェクトに対する権限を持っている必要がないことです。これはドキュメントで読むことができますが、自分でテストする方が高速です。
create table dbo.TestTable (col1 int)
go
create procedure dbo.TestProc
as select col1 from dbo.TestTable
go
grant execute on dbo.TestProc to UserWithNoPermissions
go
execute as user = 'UserWithNoPermissions';
-- this gives error 229 (SELECT permission denied)
select * from dbo.TestTable;
-- this works
execute dbo.TestProc;
revert;
いくつかの例外があることに注意してください。動的SQLは独自のスコープで実行されるため、プロシージャがそれを使用する場合、実行中のユーザーは実際に基になるオブジェクトに対するアクセス許可を必要とします。
ロールへの権限の付与をより細かくしたい場合は、'Security' フォルダ (データベースの下) の下で、特定の stroed proc に対する実行権限を構成できます。
つまり、管理スタジオのオブジェクト エクスプローラーで、[データベース] -> [セキュリティ] -> [自分の役割] -> プロパティを右クリック -> [セキュリティ保護] セクション
ここでは、特定のオブジェクト タイプとその権限などを追加できます。
お役に立てれば。
これは、ストアド プロシージャ内で実行されるアクションによって異なります。
単純SELECT
にステートメントを実行する場合、db_datareader
ロールはストアド プロシージャの実行に適している必要があります。はdb_datawriter
、それらを作成する資格があるロールです。