我有一个Web应用程序,它接受SQL查询并以报告的形式生成输出。我不希望用户以任何方式修改现有数据库。为此,我决定通过查看提供的查询的第一个单词来阻止Web应用程序级别的所有CREATE,ALTER,DELETE,DROP
命令。这将阻止用户更改现有架构或数据库实例。
最近我发现Microsoft SQL Server具有命令SELECT * INTO NEW_TABLE FROM OLD_TABLE
,它允许我们create
现有表的副本。还有更多此类命令允许我们通过传递Web应用程序过滤器来修改现有数据库的模式或实例吗?
根据我的要求阻止命令的任何更好的方法也受到欢迎,但我不希望以安全为代价剥夺使用SQL查询创建报告的自由。
为什么我不能使用Grant
我看到授权是一个很好的选择,我从评论和答案中看到但是我将无法使用它们,因为用户提供了我用来创建报告的数据库详细信息以及用户名和密码。用户指向的DB表创建报告
答案 0 :(得分:2)
您可以使用仅具有读取权限的用户执行的查询结果生成报告。这意味着管理数据库连接以允许应用程序的其他部分操作数据(您将需要以不同的用户身份进行连接)。
CREATE USER 'foouser'@'localhost' IDENTIFIED BY 'barpass';
GRANT SELECT ON db.table TO 'foouser'@'localhost';
答案 1 :(得分:0)
即使您使用“SELECT * INTO NEW_TABLE FROM OLD_TABLE”,您也必须先使用create语句创建new_table,然后才能使用该语句。