【问题标题】:Restricting SQL query in java在java中限制SQL查询
【发布时间】:2017-08-11 08:09:05
【问题描述】:

我有一个查询,例如select username as test , userpassword as testing, concat(userpassword,username), concat(userpassword,username) as test1 from mytable

上述查询的结果将是相应的列详细信息。此查询由用户在我们的 Web 应用程序中作为输入给出,我们通过显示 ******* 来限制某些列的显示,例如 userpassword

但是在上面的查询中,由于我们的列使用别名和 concat 函数,我们的密码被显示出来了。

我想要一个显示******* 代替别名列名的代码,即即使名称更改后,它也应该只显示为*******

有什么方法可以限制as 查询和concat 查询仅用于我们希望显示为******* 的列。

【问题讨论】:

  • 限制来自 JAVA 的架构级别访问不是一个好主意。您应该只在数据库级别执行此操作。假设用户输入不是 DML,创建一个单独的 db 用户来执行来自用户输入的查询并限制该用户的访问。您可能希望创建可用于查询用户输入而不是架构的公共视图。不要在公共视图中包含您希望对用户输入查询隐藏的此类列。
  • 您使用的是 MySQL、MS SQL Server 还是 Oracle?不要标记未涉及的产品。
  • 对不起。我正在使用 mssql。

标签: java mysql sql sql-server oracle


【解决方案1】:

如果可能,不要让用户运行他自己的 SQL。此外,不要在数据库中以纯文本形式存储密码。如果您真的对此无能为力,首选的解决方案在某种程度上取决于您的 DBMS 可用的安全级别。但在任何情况下,都应将用户添加到数据库,其访问权限仅限于您希望允许用户执行的数据和操作 - 并在建立连接时由您的应用程序使用。在您的 DBMS 手册中查找权限和/或授权。如果幸运的话,它支持列级安全性,因此您可以禁用对密码列的访问。然后 DBMS 将处理所有别名。

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多