簡體   English   中英

限制在SQL Server中刪除列的權限?

[英]Restricting permission to drop column in SQL Server?

ALTER TABLE [dbo].[Client] ADD [Awesomness] [nvarchar](max)
ALTER TABLE [dbo].[Client] DROP COLUMN [Awesomness]

第二個命令我不希望成功,我不希望任何DROP COLUMN成功。 因此,我為數據庫創建了一個用戶,只是想知道如何拒絕該用戶對DROP COLUMN的權限。 我設置了一個觸發器,但這似乎並不能解決DROP COLUMN 無論如何,我可以限制這一點嗎?

CREATE TRIGGER [TR_DB_NO_DROPPING_OBJECTS_2]
on DATABASE
FOR 
DROP_PROCEDURE,DROP_FUNCTION,DROP_VIEW,DROP_TABLE, DROP_DEFAULT,DROP_EXTENDED_PROPERTY
AS
 BEGIN
    IF  --only two accounts allowed to drop stuff
   suser_name() NOT IN('test' )

 BEGIN
 --raise an error, which goes to the error log
 RAISERROR('Unauthorized use of drop object from inpermissible host.', 16, 1)
 --prevent the drop
  ROLLBACK
    END
 --if it got to here, it was the "right" user from the "right" machine (i hope)
 END

我分配給用戶的角色。

use Hasan
go
EXEC sp_addrolemember N'db_datareader', N'TestUser'
go

use Hasan
go
EXEC sp_addrolemember N'db_datawriter', N'TestUser'
go

use Hasan
GO
GRANT EXECUTE TO [TestUser]
GO

use Hasan
GO
GRANT INSERT TO [TestUser]
GO

use Hasan
GO
GRANT SELECT TO [TestUser]
GO

use Hasan
GRANT ALTER TO [TestUser]
GO

use Hasan
GO
GRANT UPDATE TO [TestUser]
GO

use Hasan
GO
GRANT DELETE TO [TestUser]
GO

那將是一個Alter_Table DDL事件。 看看是否適合您。

另外,我不確定您是否研究過角色。 授予dbwriter和dbreader允許進行CRUD操作,但不能更改DDL。

https://msdn.microsoft.com/zh-CN/library/ms189121.aspx

編輯:此示例不檢查用戶,但它適用於我的測試表:

CREATE TRIGGER testtrig 
ON Database 
FOR alter_table 
AS 
    Declare @Msg nvarchar(max) = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'))
     If @Msg Like '%Drop Column ColumnA%'
     Rollback
GO

像分析示例中的消息文本一樣,可能有更好的方法,這只是一個快速測試。

還請記住,這只是一種安全措施,讓用戶知道他們不應刪除此列。 如果他們具有DDL權限,則可以禁用或刪除觸發器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM