0
ALTER TABLE [dbo].[Client] ADD [Awesomness] [nvarchar](max)
ALTER TABLE [dbo].[Client] DROP COLUMN [Awesomness]
第二个命令我不想成功,我不希望任何DROP COLUMN
成功。所以我为我的数据库创建了一个用户,只是想知道如何拒绝这个用户的许可DROP COLUMN
。我设置了一个触发器,但似乎没有照顾DROP COLUMN
。反正我有限制吗?限制在SQL Server中删除列的权限?
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事件,是否也会限制'ALTER TABLE [dbo]。[Client] ADD [Awesomness] [nvarchar](max)'?此外,我给了我的用户dbwriter和dbreader角色,但用户仍然可以删除列。 – chillax786
我刚刚创建了一个测试帐户,如果帐户只有dbwriter和dbreader,我无法删除一列。您的用户必须具有像系统管理员一样的登录设置,或者可能是具有所需权限的组的一部分。正如你所说,这将拒绝添加或删除列的能力,创建表/视图等。如果您想允许用户进行其他DDL更改,那么在Alter_Table中使用触发器可能是您的最佳选择。 –
谢谢!我尝试在我的触发器中添加Alter_Table,但仍然可以放置列......对此的任何想法? – chillax786