2008-11-17 47 views
1

我很好奇,有没有办法告诉SQL Server特定组只能从单个位置/应用程序访问数据库。我有一个SQL Server和一个Web服务器。我们的应用程序使用存储过程,每个存储过程的访问都基于允许访问它的角色。然后根据用户组将执行的功能分配角色。作为一个附加的安全层,我想指定这些用户可以从中访问数据库的Web应用程序。将SQL Server锁定到Web服务器上的特定应用程序

我想这是矫枉过正。存储过程的名称在任何时候都不会被用户隐藏(所有的错误都被隐藏起来,通用的“抱歉,这不起作用”显示给用户)。用户只能访问允许执行的存储过程。这只是一个很好的额外安全措施,所以如果一个表意外授予每个人完全访问权限,数据库将只允许从一个位置完全访问。

回答

0

在连接字符串中,您可以设置Application Name=MyAppName - 这不是真正的安全,但你可以在你的SP(sysprocesses检查了这 - 在program_name列中)和通过sp_who

没有什么可以做表格 - 这就是为什么我建议这是允许在所有(SELECTINSERTUPDATE,或DELETE)访问表的任何作用。

您可以使用一些自动化的T-SQL定期进行审计,以确保没有人做任何愚蠢的事情。

我没有以任何方式提倡这个,但你可以做这样的事情的看法(比较当前的流程和程序名的SPID):

CREATE VIEW YourViewNameHere 
AS 
SELECT * 
FROM YourTableNameHere 
WHERE EXISTS (
    SELECT spid, program_name 
    FROM sys.sysprocesses 
    WHERE program_name = 'YourProgramNameHere' 
     AND spid = @@SPID 
) 
+0

View有什么用?这个问题源于使用Linq to Sql的想法,而不是为每一级访问实现视图分别存储过程,这些实现视图强制访问每个表并由Linq to SQL使用。 – user108418 2008-11-17 18:15:51

0

我建议运行应用程序/应用程序池作为对过程具有权限的服务帐户,但不要授予用户自己的任何权限。这需要不执行在数据库级用户安全,而是在应用级..

+0

唯一的问题是不同的应用程序的访问级别。许多应用程序都具有管理员级别和基本用户级别。要有不同的级别,此方法需要X池和X应用程序的X级别。 – user108418 2008-11-17 18:13:24

0

最简单的方法是只将其锁定在用户级别上。您可以在具有所需权限配置的特定安全环境下运行您的win/web应用程序。

这提供了强制用户运行应用程序与SQL进行交互的好处,并且不能仅仅打开企业管理器或其他任何东西。

相关问题