【问题标题】:Locking SQL Server to a specific application on a web server将 SQL Server 锁定到 Web 服务器上的特定应用程序
【发布时间】:2008-11-17 15:15:41
【问题描述】:

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

我想这有点矫枉过正。存储过程名称始终对用户隐藏(所有错误都被隐藏,向用户显示通用的“对不起,这不起作用”)。用户只能访问他们被允许执行的存储过程。这只是一个很好的额外安全措施,因此如果一个表意外授予每个人完全访问权限,数据库将只允许从一个位置进行完全访问。

【问题讨论】:

    标签: sql-server security web-applications


    【解决方案1】:

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

    您对表格无能为力 - 这就是为什么我建议 nobody 担任 any 角色,该角色完全允许访问表格 (SELECT, @ 987654326@、UPDATEDELETE)。

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

    我不以任何方式提倡这一点,但您可以对视图执行类似的操作(比较当前进程的 SPID 和 program_name):

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

    【讨论】:

    • View 的呢?这个问题源于使用 Linq to Sql 的想法,而不是为每个访问级别实现单独的存储过程实现视图,这些视图强制对每个表进行访问并由 Linq to SQL 使用。
    【解决方案2】:

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

    【讨论】:

    • 唯一的问题是改变应用程序的访问级别。许多应用程序同时具有管理员级别和基本用户级别。要具有不同的级别,此方法需要 X 个池和 X 个应用程序用于 X 个级别。
    【解决方案3】:

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

    这有利于强制用户运行您的应用程序以与 SQL 交互,而不能只打开企业管理器或其他任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多