2

有没有办法保护胖客户端访问的 sql server 数据库?含义:应用程序在放置 sql 语句时直接与数据库通信。这意味着,连接字符串必须在客户端的某个位置。使用此连接字符串(使用 winauth 或 sql server 身份验证),任何用户都可以使用一些管理工作室或命令行访问数据库,并将不同于 GUI 允许的语句放置到数据库中。
该怎么办?我无法在客户端和数据库之间放置另一层,因为此架构已修复。

4

3 回答 3

3

在所有安全模型中,包括 Windows 和 SQL 身份验证,访问权限都授予用户(身份),而不是应用程序。因此,应用程序所需的任何访问权限都必须授予运行该应用程序的用户。当使用 Windows 身份验证时,这意味着同一用户可以从 SSMS 查询中利用应用程序自己所需的所有权限。这是任何管理员都必须了解的基本规则。从安全的角度来看(意思是 CC 合规等)这是一个事实,任何试图规避它的尝试都是注定的。

但从实际的角度来看,有一些措施是可以部署的。最常用的一种方法是使用登录触发器来验证APP_NAME()SSMS 并仅允许从一组明确定义的客户端工作站和一组明确定义的用户访问 SSMS。

CREATE TRIGGER reject_SSMS
ON ALL SERVER WITH EXECUTE AS '...'
FOR LOGON
AS
BEGIN
IF (APP_NAME() = 'Microsoft SQL Server Management Studio' 
   OR APP_NAME() = 'Microsoft SQL Server Management Studio - Query')
   AND (ORIGINAL_LOGIN() NOT IN (...)
   OR HOST_NAME() NOT IN (...))
    ROLLBACK;
END;

重要的是要了解此类机制不是安全功能,因为恶意用户可以轻松绕过它们。它们更像是门锁:它们不会让小偷远离,而是让诚实的用户保持诚实。

于 2010-07-28T16:10:05.763 回答
2

这就是 SQL Server 权限的用途。

您可以执行诸如授予用户对视图或存储过程的权限之类的操作,而无需授予用户对基础表的权限。

您可能想查看应用程序角色

http://msdn.microsoft.com/en-us/library/ms190998.aspx

http://www.sqlservercentral.com/articles/Security/sqlserversecurityprosandconsofapplicationroles/1116/

于 2010-07-28T11:07:31.963 回答
1

首先,SQL 注入漏洞的全部意义在于攻击者能够操纵查询。这个有目的的协议是一个更严重的漏洞。但不仅如此,这也明显违反了CWE-602: Client-Side Enforcement of Server-Side SecurityCWE-603: Use of Client-Side Authentication

为了确保安全,您必须执行以下操作:

每个用户还必须有自己的锁定数据库。因为他们只有 select/update/delete/insert 而没有其他权限(尤其是 xp_cmdshell()!!!!)。您不能允许用户共享数据库,否则攻击者将能够查看其他用户的信息。攻击者将始终能够获取 sql server 的用户名/密码,并能够直接与他自己的客户端连接。很难认为这种关系是安全的,在几乎所有情况下,这都是巨大的漏洞。

实际上,这是一个非常严重的架构缺陷,您必须构建一个服务器端组件来为客户端构建查询。这通常使用 SOAP(ms 平台的 wcf)来完成。

于 2010-07-28T15:57:15.413 回答