【问题标题】:How do I prevent other applications from connecting to SQL Server?如何防止其他应用程序连接到 SQL Server?
【发布时间】:2012-09-05 12:32:55
【问题描述】:

我有一个 Delphi 应用程序通过 ADO 组件连接到远程 SQL Server。

我怎样才能只允许我的应用程序访问 SQL Server 2012 并且应该丢弃任何其他尝试连接的应用程序?

【问题讨论】:

    标签: sql-server sql-server-2012-express


    【解决方案1】:

    问题是所有连接到 SQL Server 的东西都是通过 ConnectionString 来完成的。

    如果你真的想要,你可以拦截这些,然后用它们伪装成另一个应用程序。

    只要应用程序不能以一种方式或另一种方式使用数字签名进行连接,就无法强制执行您想要的。

    【讨论】:

    • 我同意这个总结。只要有人可以创建连接字符串并传递有效的身份验证凭据,任何应用程序都将获得对 SQL Server 数据库的访问权限,以及提供的用户 ID 通常会获得的任何角色和授予的权限。
    【解决方案2】:

    您应该使用Logon trigger 并在此触发器中将APP_NAME() 与包含您的应用程序名称的常量进行比较。如果不同,则执行ROLLBACK

    【讨论】:

    • 如何将APP_NAME传递给sql server?
    • APP连接参数。
    • 谢谢,+1。这就是我的想法......我仍然认为这有点毫无意义,因为如果我有连接字符串,我可以在另一个应用程序中使用它。
    【解决方案3】:

    您可以使用 SQL Server 的Application Role

    对我来说,用登录触发器锁定整个 SQL Server 是没有意义的。可能有其他数据库,它也应该是免费的,例如SQL 代理或用于 Management Studio 或用于更新程序...

    如果您想控制对数据库的访问 - 使用用户和应用程序角色。按应用程序。角色你应该从你编译的代码中调用一个存储过程,并且你能做的所有事情都将由应用程序角色定义。如果您禁用其他角色和用户的访问权限,则没有人可以访问您的数据库......其他数据库也可以配置为不授予其他用户/角色权限。

    它更有意义,连接字符串没有问题,并且可以灵活地用于其他任务。

    对不起,我的英语不是我的母语。

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多