[英]How to DROP multiple columns with a single ALTER TABLE statement in SQL Server?
[英]Avoid alter and drop command on a Table and SP in SQL Server
我在SQL Server中有一个table
和一个SP
。 我想在一个表和SP上添加Permissions
,没有人可以更改表的结构和SP的逻辑。 有什么方法可以指定这种类型的权限。 避免drop
和alter
命令的任何触发器,或执行此操作的任何其他方式。 提前致谢。
您需要创建和使用一个单独的用户,该用户仅具有您明确允许它的特权(例如,从表中进行GRANT SELECT
或存储过程中的GRANT EXECUTE
)。
而不是看它是不允许你应该考虑允许哪些措施的某些操作(见最小权限原则 )。
是的,这是可能的,但不能使用约束。 约束是一种业务规则验证,这里是您关于对象权限的问题,因此现在很明显,您需要为特定用户定义对象权限。如果要保护表和存储过程,请按照以下步骤操作。
使用- GRANT SELECT ON <TableName> TO <Username>
上授予对安全表的授权
使用GRANT EXECUTE ON <SP Name> TO <Username>
授予安全存储过程GRANT EXECUTE ON <SP Name> TO <Username>
有关许可的更多信息,请在Google上进行一些搜索。
强烈建议您管理对象的权限。 但是,如果您无法控制权限,请考虑设置数据库DDL触发器以至少记录事件。
create table AuditTable
(
event_type varchar(max) not null
, tsql_command varchar(max) not null
, modified_by varchar(128) not null default (current_user)
, modified_time datetime not null default (getdate())
)
go
create trigger log_database_level_event
on database
for ddl_database_level_events
as
insert AuditTable
(
event_type
, tsql_command
)
values
(
eventdata().value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(max)')
, eventdata().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)')
)
go
create user tester without login
go
execute as user = 'tester'
go
create proc test_proc
as
select @@version
go
alter proc test_proc
as
select 1
go
revert
go
select * from AuditTable
go
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.