SQL Server安全性:仅允许来自应用程序的表更新

时间:2016-10-21 05:34:16

标签: sql sql-server

我们有一个数据库,所有应用程序用户都可以使用Windows身份验证访问该数据库。有一个表我只能通过应用程序用户界面更新,而不是直接登录到SQL Server Management Studio。

我已经研究了SQL Server安全性,但它说的是,如果用户有权访问数据库对象,则允许通过任何接口或管理工作室。我想知道这个奇怪的场景是否会有一些解决方案。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以将表的权限调整为仅限SELECT。然后,您可以创建用于更新此表的存储过程。您将向允许更新此表的用户授予执行权限。

要使其仅从应用程序运行,您可以添加从应用程序传递的参数(如@authentication_key)(硬编码到应用程序中)。在SP中,如果密钥与某个预定义值匹配,则验证密钥。

要使SP代码不可读,您将使用WITH ENCRYPTION选项创建SP。当您执行此操作时,您将需要将SP的Souarce保存在其他位置,因为您将无法从SQL Server检索源

答案 1 :(得分:2)

在您的表格上创建Trigger,以防止从SSMS进行更新。

并通过使用系统函数来区分应用程序名称:

 APP_NAME() 

示例:

--Create Test table
Create table test (id int , name varchar (20))
go
--insert dummy data
insert into Test values (1, 'aaaa'), (2,'bbbb')
go

-- create our trigger for preventing updating via SSMS
CREATE TRIGGER trgPreventUpdateTestTableViaSSMS
ON test
FOR UPDATE AS 
BEGIN
    IF APP_NAME() = 'Microsoft SQL Server Management Studio - Query' 
    begin
        RAISERROR('Cannot update test table via using SSMS',16,1) 
        rollback
        end
END
GO

-- try update
update Test set name = 'cccc' where id = 2

结果:

enter image description here