仅允许通过特定应用程序进行DBMS用户连接

时间:2016-02-18 08:14:56

标签: mysql sql sql-server database oracle

我正在开发一个多用户应用程序Windows桌面应用程序。 对于用户管理,我使用DMBS(Oracle,MySQL,MSSQL,Postgre)。 因此每个用户都有一个数据库用户帐户。

我不希望用户直接连接数据库并读/写数据。 数据应该只是可访问的连接只有在他们使用我的应用程序时才有效。

我发现了website by SQLDUDE,他描述了一些技巧。

仅通过特定应用程序访问数据的一种方法是检查application_name的登录触发器。 但是,他还描述了这种方法很容易被欺骗,因为用户可以在连接字符串中知道它后指定application_name。 (detailed explanation here - see Solution for Scenario #2

他还提到了应用程序角色

  

您可以使用的更安全的方法称为"应用程序   角色&#34 ;.从应用程序连接时,您会假设特定的   角色,只有该角色被授予特权所需的特权   数据库中。

所以基本上用户使用他的登录凭据登录但根本没有权限(仅连接)。

然后在应用程序内部,我使用密码调用sp_setapprole,一旦建立连接,就会授予应用程序规则。

  

一旦此调用成功,则连接将获得该权限   应用程序角色并失去实际用户的权限   我们想要什么。因此,如果有人试图从SSMS连接到数据库   或者SQLCMD,他们将使用他们的凭据访问数据库   将不具有表所需的权限,因为只有   application role拥有表的权限。这是更安全的&   可靠的方法,但需要应用程序代码更改和   作为DBA,您必须在SQL Server中创建应用程序角色。

因此应用角色听起来就像是要走的路。

我的问题是:

应用程序角色是DMBS标准并且可用于大多数DBMS系统吗?

是否可以跟踪sp_setapprole登录(例如使用WireShark)?

当然有人可以对应用程序进行逆向工程并获取应用程序角色的凭据 - 但我认为这是不可避免的:)

1 个答案:

答案 0 :(得分:1)

我已经看到了一个更简单的解决方案,它运行良好。这是:

  • 应用程序负责在数据库中创建用户
  • 在创建用户之前,应用程序对其密码进行了哈希/加密,因此如果您选择了密码" 123456"它将被创建为" RRU2992191910" (只是一个例子)
  • 如果用户尝试使用" 123456"连接到数据库。它不会成功
  • 只有应用程序能够连接到数据库,因为它散列/加密了用户通知的密码

这不是世界上最安全的解决方案,但它非常简单,可以满足您的需求。它可以移植到不同的RDBMS,而无需额外费用。