mysql - 是否可以在不使用 create、alter、delete、drop 命令的情况下修改任何数据库的架构或实例?

标签 mysql sql sql-server oracle security

我有一个 Web 应用程序,它接受 SQL 查询并以报告的形式生成输出。我不希望用户以任何方式修改现有数据库。为此,我决定通过仅查看所提供查询的第一个单词来阻止 Web 应用程序级别的所有 CREATE、ALTER、DELETE、DROP 命令。这将阻止用户更改现有架构或数据库实例。

最近我发现 Microsoft SQL Server 有命令SELECT * INTO NEW_TABLE FROM OLD_TABLE,它允许我们创建现有表的副本。是否还有更多此类命令允许我们通过传递 Web 应用程序过滤器来修改现有数据库的架构或实例?

也欢迎任何根据我的要求阻止命令的更好方法,但我不希望以安全为代价剥夺使用 SQL 查询创建报告的自由。

为什么我不能使用 Grant

我从评论和答案中看到,授权是一个不错的选择,但我无法使用它们,因为用户提供了我用来创建报告的数据库详细信息以及用户名和密码。我为用户指向的数据库表创建了报告

最佳答案

您可以根据仅具有读取权限的用户执行的查询结果生成报告。这意味着管理数据库连接以允许应用程序的其他部分操作数据(您将需要以不同的用户身份进行连接)。

CREATE USER 'foouser'@'localhost' IDENTIFIED BY 'barpass';  
GRANT SELECT ON db.table TO 'foouser'@'localhost';

关于mysql - 是否可以在不使用 create、alter、delete、drop 命令的情况下修改任何数据库的架构或实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163536/

相关文章:

java - JDBC程序创建两个不同的连接

java - POM 丢失,没有可用的依赖信息,未找到 cfg.xml

sql - 为什么 WHERE 子句从结果中删除空值?

java - Sql多对多查询问

sql-server - 存储过程返回多个表,但 EF 仅使用唯一的第一个数据表结果创建单个结果集

SQL Server 获取列不在 Group By 子句中?

php - 调用mysql存储过程后报错

java - '@' 的转义字符——JDBC?

sql - 从VB.net调用存储过程超时错误

sql-server - SQL Server 类似于 postgres 的功能