テーブルを切り捨てられるようにするために、MSSQLでユーザーを付与するにはどのような権限が必要ですか?
最小限のアクセス許可セットを付与しようとしていますが、テーブルが非常に大きく、操作を迅速にするため、DELETEを使用できません。
ALTERパーミッションが必要です:Permissionsセクション here を参照してください。
ストアドプロシージャをEXECUTE ASで使用することもできます。そのため、ストアドプロシージャを実行しているユーザーにALTER権限を付与する必要さえありません。
ストアドプロシージャwith execute as owner
を作成できます。
create procedure dbo.TruncTable
with execute as owner
as
truncate table TheTable
go
次に、そのテーブルを切り捨てる必要がある人に実行権限を付与します。
grant execute on TruncTable to TheUser
これで、TheUser
は次のようにテーブルを切り捨てることができます。
exec dbo.TruncTable
必要な最小限の権限は、table_nameに対するALTERです。 TRUNCATE TABLEパーミッションは、デフォルトでテーブル所有者、sysadmin固定サーバーロールのメンバー、db_ownerおよびdb_ddladmin固定データベースロールに設定されており、譲渡できません。ただし、ストアドプロシージャなどのモジュール内にTRUNCATE TABLEステートメントを組み込み、EXECUTE AS句を使用してモジュールに適切な権限を付与できます。詳細については、「EXECUTE ASを使用してカスタムアクセス許可セットを作成する」を参照してください。
与えないで、隠して...
CREATE TRIGGER TRG_MyTable_Foo
WITH EXECUTE AS OWNER
INSTEAD OF DELETE
AS
IF CONTEXT_INFO() = 0x9999
BEGIN
TRUNCATE TABLE MyTable
SET CONTEXT_INFO 0x00
END
GO
SET CONTEXT_INFO 0x9999
DELETE MyTable WHERE 1=0
SET CONTEXT_INFO 多分 間違いなくbetterは、通常のDELETEとTRUNCATE TABLEを分離します
私はこれを試していません...
編集:SET CONTEXT_INFOを使用するように変更されました。