在MySQL5.7之前,在使用CREATE USER
命令时有以下多个限制:
- 无法设置授权插件并密码
- 无法禁用一个用户
- 无法设置用户资源限制
- 无法设置非默认密码的过期策略
- 无法使用SSL/x509
所有这些限制实际上都可以通过其它方法来得到实现,但通常你需要涉及到使用其它语句,如
GRANT
命令。从MySQL 5.7.6开始,这些操作可以通过这个新增强的
CREATE USER
语法来进行实现。
密码及授权插件设置
从安全角度来说,这是最重要的部分,在使用建立用户账户的同时能够使用非默认的授权插件(如sha256_password)和非空密码设置:
mysql> CREATE USER dbdao@localhost IDENTIFIED WITH sha256_password BY 'mysqlpassword'; Query OK, 0 rows affected (0.00 sec)
这里,我们可以使用
CREATE USER ... IDENTIFIED BY
子句来设置密码,在建立用户时,不能强制建立的账户不使用空密码是一个非常大的安全问题。
禁用账号
MySQL团队注意到之前有许多大量关于避免终端用户可直接访问某些账户的需求。甚至在MySQL 5.6版本中实现了
mysql_no_login
授权插件来支持此类使用。现在有更好的方法了 – 只需要定义账号为锁定状态即可:mysql> CREATE USER dbdao@localhost ACCOUNT LOCK; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye D:\mysql-5.7.7-rc-win64> bin\mysql -udbdao -P3309 ERROR 3118 (HY000): Access denied for user 'dbdao'@'localhost'. Account is locked.
其他新建账号语句项
还有一些对
CREAT USER
命令的其他方便的增强,如建立一个新账号并定义一个非标准密码过期策略:mysql> CREATE USER dbdao@localhost --> IDENTIFIED BY 'mysqlpassword' --> PASSWORD EXPIRE INTERVAL 1 DAY; Query OK, 0 rows affected (0.00 sec)
同时,在建立一个新账号时,你不再需要其他很多命令来实现SSL安全通信:
mysql> CREATE USER dbdao@localhost REQUIRE SSL; Query OK, 0 rows affected (0.00 sec)
你也能在同一句建立账号的语句中限制资源使用:
mysql> CREATE USER dbdao@localhost WITH MAX_QUERIES_PER_HOUR 5; Query OK, 0 rows affected (0.00 sec)
通过使用这些语法,用户可以大大简化用户建立过程及脚本命令行数量。同时我们也需要感谢Satish和所有带来这些功能增强的人!
如果你对相关的新语法感兴趣,可查阅MySQL最新文档。
MySQL 5.7关于
CREATE USER
命令文档链接:
Comment