テーブルを切り捨てることができるようにするために、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を使用するように変更。