[MySQL]账户及权限管理

页面导航:首页 > 数据库 > Mysql > [MySQL]账户及权限管理

[MySQL]账户及权限管理

来源: 作者: 时间:2016-02-18 10:28 【

[MySQL]账户及权限管理MySQL初始账户管理MySQL的初始账户如下:[sql] [[email protected] ~]# mysql -u root mysql select host,user,password from mysql.user; +-----------+------+----------+ | ...
[MySQL]账户及权限管理
 
MySQL初始账户管理
 
MySQL的初始账户如下:
[sql] 
[[email protected] ~]#  -u root  
mysql> select host,user,password from mysql.user;  
+-----------+------+----------+  
| host      | user | password |  
+-----------+------+----------+  
| lx16      | root |          |  
| 127.0.0.1 | root |          |  
| ::1       | root |          |  
| localhost |      |          |  
| lx16      |      |          |  
| localhost | root |          |  
+-----------+------+----------+  

 

MySQL有两类初始用户:
root超级账户:拥有全部的权限,可以做任何事。
匿名账户:如何人都可以通过它连接服务器,但它权限很小。
在默认情况下,这些账户都没有口令,因此为了安全起见,我们首先必须得为所有的root账户设置密码。
设置密码的第一种方法是用SET PASSWORD语句,假如我们现在要给'root'@'localhost'设置口令,只要执行:
[sql] 
mysql> set password for 'root'@'localhost'=password('*****');  

 

 
设置密码的第二种方法是直接update user权限表,这种方法的好处是可以同时给多个账户设置密码,如下面的语句可以一次修改所有root账户的密码:
[sql] 
mysql> update mysql.user set password=password('***') where user='root';  
mysql> flush privileges;  

 

如果用update方式修改,必须明确告诉服务器重新加载权限表(flush privileges)
 
对于匿名账户,强烈建议将他们删除,删除语句如下:
[sql] 
mysql> drop user ''@'localhost';  
mysql> drop user ''@'lx16'; 
 
执行完以上操作之后,user权限表里的数据如下:
[sql] 
mysql> select host,user,password from mysql.user;  
+-----------+------+-------------------------------------------+  
| host      | user | password                                  |  
+-----------+------+-------------------------------------------+  
| lx16      | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| 127.0.0.1 | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| ::1       | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| localhost | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
+-----------+------+-------------------------------------------+  

 

 
创建新账户
 
MySQL不仅要求你必须值得谁(user_name)能连接,还必须指定从什么地方连接(host_name),也就是说即便两个账户拥有相同的名字,如果他们将从不同客户端连接,你也要为它们各自创建一个账户。
可以利用以下两个通配符灵活配置主机名的限制:
‘%’ - 匹配任何多个字符
‘-’ - 配置一个字符
[sql] 
test账户可以从任意IP连接  
create user 'test'@'%' identified by '***';  
test账户只能从本地连接  
create user 'test'@'localhost' identified by '***';  
test账户只能从'192.168.2.%'网段连接  
create user 'test'@'192.168.2.%' identified by '***';  
还可以使用IP掩码  
create user 'test'@'192.168.2.2  

 

 
权限管理
 
对账户授权需要使用Grant语句,如果账户已存在,Grant语句给它授权,如果账户不存在,Grant语句先创建它,再给它授权。
可以通过show grants语句获得自己的权限:
[sql] 
mysql> show grants;  
+----------------------------------------------------------------------------------------------------------------------------------------+  
| Grants for [email protected]                                                                                                              |  
+----------------------------------------------------------------------------------------------------------------------------------------+  
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*578EC7851088AC1F2A67B100540344B03BD2BA99' WITH GRANT OPTION |  
+----------------------------------------------------------------------------------------------------------------------------------------+  

 

也可以通过show grants for 获得其它用户的权限:
[sql] 
mysql>show grants for ''@'localhost';  
+--------------------------------------+  
| Grants for @localhost                |  
+--------------------------------------+  
| GRANT USAGE ON *.* TO ''@'localhost' |  
+--------------------------------------+  

 

 
上面显示的是两种特殊权限,一种是ALL(后面的PRIVILEGES关键字可省略),表示所有操作的权限(但不包括Grant权限,Grant权限由with grant option赋予);另一种是USAGE,一种特殊的“无权限”的权限。
 
在某些少数情况下,我们可能需要更细致的权限控制,MySQL可以做到在列上进行授权,下面这条语句表示把全表的select权限给test,但只把(street,city)这两列的update权限给它:
[sql] 
grant select, update (street,city) on sampdb.member to 'test'@'localhost';  

 


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<