面向公网的MySQL/MariaDB应用能否授予ALL PRIVILEGES?安全问询
MySQL权限配置与CREATE USER权限说明
一、公网第三方应用的安全权限集
当无法确定第三方应用所需权限时,绝对不要使用ALL PRIVILEGES,因为这会赋予类似root的超级权限,对公网应用来说风险极高。
最宽泛且安全的权限集,应当限定在目标数据库范围内,包含应用常见的操作权限,示例SQL如下:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES ON myapp.* TO 'myapp'@'%' IDENTIFIED BY 'your_strong_password';
- 这些权限覆盖了数据读写(SELECT/INSERT/UPDATE/DELETE)、表结构变更(CREATE/ALTER/DROP)、索引管理(INDEX)、临时表创建(CREATE TEMPORARY TABLES)以及表锁定(LOCK TABLES),基本能满足绝大多数应用的需求。
- 限定在
myapp.*目标数据库,避免权限扩散到其他库;同时去掉WITH GRANT OPTION,防止该用户转授权限给其他账户,进一步降低风险。
二、CREATE USER权限的作用与权限限制
CREATE USER权限仅允许你创建新的MySQL用户账户,但无法让你绕过自身权限限制创建访问其他数据库的用户:
要给新用户授予某数据库的访问权限,你自身必须拥有该数据库的对应权限,并且(如果要转授权限)带有
GRANT OPTION。
举个例子:如果你只能访问数据库A,即使拥有CREATE USER权限,你也无法执行GRANT ALL ON B.* TO 'new_user'@'%'这样的语句——因为你本身没有数据库B的任何权限,MySQL会直接拒绝该操作。
内容的提问来源于stack exchange,提问作者samvv
相关产品推荐
相关产品推荐

