43

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

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

4

5 に答える 5

74

ALTER パーミッションが必要です。こちらの「パーミッション」セクションを参照ください。

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

于 2011-01-19T12:10:42.637 に答える
9

ストアド プロシージャを作成できます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
于 2011-01-19T12:34:46.107 に答える
8

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

ソース

于 2011-01-19T12:12:12.333 に答える
1

許可しないで、隠して...

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を使用するように変更。

于 2011-01-19T12:16:16.987 に答える