文章摘要
这篇文章主要讨论了MariaDB与MySQL在权限管理方面的差异,特别是关于`grant`命令的使用和结果。文章指出,虽然在MySQL中可以安全地使用`grant`命令来分配权限,但在MariaDB中可能会遇到权限被拒绝的错误。
文章详细描述了以下内容:
1. **权限管理的不同**:
- MySQL允许在`root`账户之外创建具有相同权限的用户(通过密码身份识别),而MariaDB不支持这一点。
- 在MySQL中,可以执行以下命令:
```sql
GRANT ALL PRIVILEGES ON *.* TO tank@'192.168.%' IDENTIFIED BY 'test';
```
但MariaDB会返回`ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password: NO)`。
2. **`grant`命令的语法差异**:
- MariaDB中,`grant`命令需要明确指定要授予权限的具体对象或范围(例如`test`库的所有权限),而MySQL允许使用`ON *.*`来表示所有库和表。
- 正确的MariaDB命令如下:
```sql
GRANT ALL ON test.* TO tank@'192.168.%' IDENTIFIED BY 'test';
GRANT SELECT ON *.* TO tank@'192.168.%' IDENTIFIED BY 'test';
```
3. **权限分配的不同**:
- MySQL允许在`root`账户之外创建与`root`账户具有相同权限的用户,而MariaDB在这方面有所不同。
- MariaDB的权限分配更加严格,且无法通过`root`账户以外的用户继承所有权限。
文章还提供了MariaDB和MySQL权限管理的对比链接,供读者进一步了解两者的差异。
用mariadb也有一段时间了,常用命令和语法,基本没变。比较复杂一点的,例如replication,也没有发现根mysql有什么不同的地方。
不过,今天真发现有不同的地方了,mariadb的权限管理根mysql不一样,mysql可以创建一个根root账户同等权限的账户,但是mariadb就不行了,写法上也所不同。
1,mariadb grant授权报错
MariaDB [(none)]> grant all privileges on *.* TO tank@’192.168.%’ IDENTIFIED BY ‘test’;
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
相同的命令在mysql下,执行是没有任何问题的。
一开始以为是mariadb的root账号和密码有问题,检查后没问题。
2,mariadb与mysql root权限不同
查看了一下,root账户所拥有的权限,mariadb和mysql是不一样的。
MariaDB [(none)]> show grants\G;
*************************** 1. row ***************************
Grants for root@localhost: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION
1 row in set (0.00 sec)
Grants for root@localhost: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION
1 row in set (0.00 sec)
ERROR: No query specified
mysql> show grants;
+———————————————————————+
| Grants for root@localhost |
+———————————————————————+
| GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION |
+———————————————————————+
1 row in set (0.00 sec)
| Grants for root@localhost |
+———————————————————————+
| GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION |
+———————————————————————+
1 row in set (0.00 sec)
3,mariadb与mysql grant语法不同
具体的讲法以,请参考:https://mariadb.com/kb/en/mariadb/grant/
MariaDB [(none)]> grant all on test.* TO tank@’192.168.%’ IDENTIFIED BY ‘test’;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant select on *.* TO tank@’192.168.%’ IDENTIFIED BY ‘test’;
Query OK, 0 rows affected (0.00 sec)
第一条命令,将test库的所有权限都给tank
第二条命令,将所有库和表的select权限给tank
注意:all不能和*.*一起使用的,不然就报错了。
您可能感兴趣的文章:Linux下将数据库从MySQL迁移到MariaDB的基础操作教程CentOS安装和设置MariaDB的教程详解Centos 使用YUM安装MariaDBcentos 7安装mysql5.5和安装 mariadb使用的命令浅谈MySQL和mariadb区别Mysql/MariaDB启动时处于进度条状态导致启动失败的原因及解决办法在Ubuntu系统中安装MariaDB数据库的教程MySQL分支选择参考:Percona还是MariaDBcentos中找回MariaDB数据库root用户权限的方法MariaDB(Mysql分支)my.cnf配置文件中文注释版
© 版权声明
文章版权归作者所有,未经允许请勿转载。