mysql的权限管理是一个比较简单的问题,今天我们来讲一下一些关于mysql的管理命令。
首先由一个问题引出我们的话题,很多童鞋在远程连接mysql数据库的时候,会经常报出1045的错误,这个错误码对于经常接触mysql的人来说是很熟悉的,这个错误代码告诉我们,mysql服务器禁止这个用户远程连接mysql。那么如何解决呢。相信很多人从网上找到一些方法,例如这个方法:
[shell]UPDATE user SET Host=’%’ WHERE User=’root’ AND Host=’localhost’;
flush privileges;[/shell]
这样修改之后,你的root账户就可以本地登录,但是如果你同时需要远程登录的话,就需要两个root账号,另外一个root账户的host改为’%’,但是在实际的生产环境中我们应该禁止掉root账户登录,或者说禁止root远程登录。如何禁用root的也弄成登录呢,很简单,先查询一下你的root远程登录权限是不是打开了:
[shell]SELECT `user`,`host` FROM user WHERE user=’root’;[/shell]
查看你的显示界面:
[shell]
+——+———–+
| user | host |
+——+———–+
| root | % |
| root | localhost |
+——+———–+[/shell]
如果你的显示结果中有这一条,也就是host=%的这一行,那么你的可以删除这一行或者将host修改成%以外的东东即可。那么这样你的root账户就只能本地登录,而不能远程登录了,安全保护就有了一重保障。
其实作为一个DBA,正常的做法是为每个用户分配合适的数据库访问权限,而不是开通一个超级账户,所有的人都共用这一个账户,这样是不安全也不合理的。正确的方法是,每个用户只能对自己使用的数据库拥有相关权限,也就是说正常的流程是:当你建立完数据库之后,就开始为这个数据库分配使用账户,然后授予这个账户相应的权限。okay,那么我们开始这样做一下。
建立数据库的工作在此省略,我们默认有一个数据库mydb。
那么,我们新建一个mysql用户,这个用户只能访问mydb,只能拥有这个数据库的相关权限。
[shell]//新建用户,在新建一个mysql账户的时候,这一句可以省略,直接使用GRANT句也可以
CREATE USER ‘gvin’@’localhos’ IDENTIFIED BY ‘passwd’;
//为账户赋予权限,这样用户名为gavin的这个账户就可以本地访问数据库
GRANT ALL PRIVILEGES ON mydb.* TO ‘gavin’@’localhost’ IDENTIFIED BY ‘passwd’;
//下面的这条权限赋予语句使gavin这个账户可以远程访问,*.*表示所有数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO ‘gavin’@’localhost’ IDENTIFIED BY ‘passwd’;
flush privileges;[/shell]
那么对于mysql账户授权语句GRANT,有很多参数,其中我们使用的ALL是使这个用户有对这个数据库的所有权限。在这里简单列出几个参数
[shell]ALTER //更改数据表和索引的定义
SELECT //可以检索数据表中的数据
UPDATE //可以更新表数据
EXECUTE //可以执行存储函数和存储过程[/shell]
另外还有一个字句也是很有用的,就是GRANT OPTION。例如我是gavin账户,我想把这个账户的权限转授给david,那么我可以这样做。假设david不存在。
[shell]CREATE USER ‘david’@’%’ IDENTIFIED BY ‘pass’;
//新建一个mysql账户其实可以不用上面的CREATE句,直接使用下面这句
GRANT ALL PRIVILEGES ON mydb.* TO ‘david’@’%’ WITH GRANT OPTION;
flush privileges;[/shell]
这样gavin的所有权限都转授给了david。
再次还有一个mysql中经常遇到的问题,就是MySQL4.1版本的安全密码验证问题。从MySQL4.1版开始,MySQL服务器对于密码的加密进行了改进。素具表mysql.user中的password数据列的文本长度增加到了45个字符(原来是16个字符),同时验证协议也改变了。这样增加了MySQL的密码验证的安全性。因此问题也来了,很多MySQL服务器升级以后,很多web应用会失效,例如你使用mysql_connect()函数连接数据库的时候会报错:
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication
那么解决这个问题的最好方法是升级web应用的MySQL服务器,但是如果在没有办法升级的情况下如何做呢,可以这样做:
[shell]vim /etc/my.conf
old_passwords=1[/shell]
将其改为
[shell]old_passwords=0[/shell]
最好重启一下mysqld服务器,然后再重新的设置一下密码即可:
[shell]UPDATE mysql.user SET Password = PASSWORD(‘123456’) WHERE user = ‘name’;
flush privileges;[/shell]
2023年六月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -
近期文章