我们有一个数据库,所有应用程序用户都可以使用Windows身份验证访问该数据库。有一个表我只能通过应用程序用户界面更新,而不是直接登录到SQL Server Management Studio。
我已经研究了SQL Server安全性,但它说的是,如果用户有权访问数据库对象,则允许通过任何接口或管理工作室。我想知道这个奇怪的场景是否会有一些解决方案。
感谢您的帮助!
答案 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
结果: