我在SQL Server中有table
和SP
。我想在表和SP上添加Permissions
,没有人可以更改表的结构和SP的逻辑。有没有办法指定这种类型的权限。任何触发器都可以避免drop
和alter
命令,或者执行此操作的任何其他方法。
在此先感谢。
答案 0 :(得分:2)
您需要创建并使用仅具有您明确允许的权限的单独用户(例如,来自表的GRANT SELECT
或存储过程中的GRANT EXECUTE
。
不要将其视为不允许某些操作,而应考虑 允许的操作(请参阅Principle of Least Privilege)。
答案 1 :(得分:1)
是的,这是可能的但不使用约束。约束是一种商业规则的验证,现在你的问题是关于对象的权限 很明显,您需要为特定用户定义对象的权限。如果您愿意 保护您的表格和存储过程,然后请按照此步骤操作。
使用 - GRANT SELECT ON <TableName> TO <Username>
使用 - GRANT EXECUTE ON <SP Name> TO <Username>
如需进一步了解权限,请在Google上进行一些搜索。
答案 2 :(得分:1)
强烈建议您管理对象的权限。但是,如果您无法控制权限,请考虑设置数据库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