web-dev-qa-db-ja.com

テーブルを切り捨てる権限

テーブルを切り捨てられるようにするために、MSSQLでユーザーを付与するにはどのような権限が必要ですか?

最小限のアクセス許可セットを付与しようとしていますが、テーブルが非常に大きく、操作を迅速にするため、DELETEを使用できません。

40
Shahar Mosek

ALTERパーミッションが必要です:Permissionsセクション here を参照してください。

ストアドプロシージャをEXECUTE ASで使用することもできます。そのため、ストアドプロシージャを実行しているユーザーにALTER権限を付与する必要さえありません。

70
Shahar Mosek

ストアドプロシージャ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
8
Andomar

必要な最小限の権限は、table_nameに対するALTERです。 TRUNCATE TABLEパーミッションは、デフォルトでテーブル所有者、sysadmin固定サーバーロールのメンバー、db_ownerおよびdb_ddladmin固定データベースロールに設定されており、譲渡できません。ただし、ストアドプロシージャなどのモジュール内にTRUNCATE TABLEステートメントを組み込み、EXECUTE AS句を使用してモジュールに適切な権限を付与できます。詳細については、「EXECUTE ASを使用してカスタムアクセス許可セットを作成する」を参照してください。

ソース

8
Martin Smith

与えないで、隠して...

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を使用するように変更されました。

1
gbn