我正在开发一个多用户应用程序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)?
当然有人可以对应用程序进行逆向工程并获取应用程序角色的凭据 - 但我认为这是不可避免的:)
答案 0 :(得分:1)
我已经看到了一个更简单的解决方案,它运行良好。这是:
这不是世界上最安全的解决方案,但它非常简单,可以满足您的需求。它可以移植到不同的RDBMS,而无需额外费用。