Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以在不使用create、alter、delete和drop命令的情况下修改任何数据库的模式或实例?_Mysql_Sql_Sql Server_Oracle_Security - Fatal编程技术网

Mysql 是否可以在不使用create、alter、delete和drop命令的情况下修改任何数据库的模式或实例?

Mysql 是否可以在不使用create、alter、delete和drop命令的情况下修改任何数据库的模式或实例?,mysql,sql,sql-server,oracle,security,Mysql,Sql,Sql Server,Oracle,Security,我有一个web应用程序,它接受sql查询并以报表的形式生成输出。我不希望用户以任何方式修改现有数据库。为此,我决定通过查看提供的查询的第一个单词,在web应用程序级别阻止所有创建、更改、删除、删除命令。这将阻止用户更改现有的模式或数据库实例 最近,我发现Microsoft SQL Server具有命令SELECT*INTO NEW\u TABLE FROM OLD\u TABLE,它允许我们创建现有表的副本。是否还有其他此类命令允许我们通过web应用程序过滤器修改现有数据库的模式或实例 根据我的

我有一个web应用程序,它接受sql查询并以报表的形式生成输出。我不希望用户以任何方式修改现有数据库。为此,我决定通过查看提供的查询的第一个单词,在web应用程序级别阻止所有
创建、更改、删除、删除
命令。这将阻止用户更改现有的模式或数据库实例

最近,我发现Microsoft SQL Server具有命令
SELECT*INTO NEW\u TABLE FROM OLD\u TABLE
,它允许我们
创建现有表的副本。是否还有其他此类命令允许我们通过web应用程序过滤器修改现有数据库的模式或实例

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

为什么我不能使用Grant


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

即使您使用“从旧表选择*进入新表”,您也必须先使用create语句创建新表,然后才能使用该语句。

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


了解阻止CREATE命令还将限制用户创建创建复杂报表时经常需要的临时表。最好禁止您的web应用程序用户执行任何任意SQL语句。@JeffreyKemp,即使我了解风险,但是,您有没有更好的替代方案?也请检查。没有,我们不要求事先创建该表
CREATE USER 'foouser'@'localhost' IDENTIFIED BY 'barpass';  
GRANT SELECT ON db.table TO 'foouser'@'localhost';