繁体   English   中英

避免对SQL Server中的表和SP进行更改和删除命令

[英]Avoid alter and drop command on a Table and SP in SQL Server

我在SQL Server中有一个table和一个SP 我想在一个表和SP上添加Permissions ,没有人可以更改表的结构和SP的逻辑。 有什么方法可以指定这种类型的权限。 避免dropalter命令的任何触发器,或执行此操作的任何其他方式。 提前致谢。

您需要创建和使用一个单独的用户,该用户仅具有您明确允许它的特权(例如,从表中进行GRANT SELECT或存储过程中的GRANT EXECUTE )。

而不是看它是不允许你应该考虑允许哪些措施的某些操作(见最小权限原则 )。

是的,这是可能的,但不能使用约束。 约束是一种业务规则验证,这里是您关于对象权限的问题,因此现在很明显,您需要为特定用户定义对象权限。如果要保护表和存储过程,请按照以下步骤操作。

  1. 创建一个具有特定数据库/对象权限的新用户/登录。
  2. 使用- GRANT SELECT ON <TableName> TO <Username>上授予对安全表的授权

  3. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM