2

テーブルが誤って切り捨てられたり削除されたりすることがあるため、管理者が特定のテーブルを削除または切り捨てないようにするにはどうすればよいですか。ビューを作成することはお勧めできません。トリガーを作成すると、db内のすべてのテーブルに実装されます。SQLサーバーの特定のテーブルに実装したいだけですか?

4

3 に答える 3

0

特別な管理者が使用する権限ディレクトリを削除するだけです。そして、そのような危険な仕事をするための権限を持つ2番目のユーザーを作成します。

GRANTおよびREVOKESQLコマンドも参照してください。

于 2012-11-09T06:51:19.800 に答える
0

次のようなすべての権限を持つスーパー管理者のユーザーとトリガーを作成してください。

CREATE TRIGGER reminder2
ON Customer
with execute as owner
AFTER  DELETE 
AS
  truncate table Customer
于 2012-11-09T06:58:31.923 に答える
0
Create TRIGGER [TR_ProtectCriticalTables]
ON DATABASE 
FOR 
DROP_TABLE

AS    
DECLARE @eventData XML,
    @uname NVARCHAR(50),
    @oname NVARCHAR(100),
    @otext VARCHAR(MAX),
    @etype NVARCHAR(100),
    @edate DATETIME
SET @eventData = eventdata()
SELECT
    @edate=GETDATE(),
    @uname=@eventData.value('data(/EVENT_INSTANCE/UserName)[1]', 'SYSNAME'),
    @oname=@eventData.value('data(/EVENT_INSTANCE/ObjectName)[1]', 'SYSNAME'),
    @otext=@eventData.value('data(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 
            'VARCHAR(MAX)'),
    @etype=@eventData.value('data(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)')
  IF @oname IN ('tbluser')-- You can give comma seperated list here
BEGIN
DECLARE @err varchar(100)
SET @err = 'Table ' + @oname  + ' is super duper protected and cannot be dropped.'
RAISERROR (@err, 16, 1) ;
ROLLBACK;
END
GO
ENABLE TRIGGER [TR_ProtectCriticalTables] ON DATABASE 

切り捨てを無効にするには、これを試してください

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'TestTable',
@role_name = NULL
GO

他にも問題が発生する場合がありますので、ご使用前にご確認ください。

于 2012-11-09T06:59:27.737 に答える