テーブルを切り捨てることができるようにするために、MSSQL でユーザーに GRANT を付与するには、どのような権限が必要ですか?
最小限の権限セットを付与しようとしていますが、テーブルが非常に大きく、操作を迅速に行いたいため、DELETE を使用できません。
テーブルを切り捨てることができるようにするために、MSSQL でユーザーに GRANT を付与するには、どのような権限が必要ですか?
最小限の権限セットを付与しようとしていますが、テーブルが非常に大きく、操作を迅速に行いたいため、DELETE を使用できません。
ALTER パーミッションが必要です。こちらの「パーミッション」セクションを参照してください。
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は、通常の DELETE を TRUNCATE TABLE から分離する方が間違いなく優れている可能性があります
私はこれを試していません...
編集:SET CONTEXT_INFOを使用するように変更。