MySQL 用户权限

查看用户权限php

show grants for你的用户;html

show grants forroot@'localhost';mysql

show grants forwebgametest@10.3.18.158;web

showcreatedatabase dbname;  这个能够看到建立数据库时用到的一些参数。 sql

showcreatetable tickets;    能够看到建立表时用到的一些参数数据库

 

使用用户权限缓存

GRANTUSAGE ON*.* TO'discuz'@'localhost'IDENTIFIED BYPASSWORD '*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB';安全

GRANTALL PRIVILEGES ON `discuz`.* TO'discuz'@'localhost';服务器

 

我先按个人理解解释一下上面两句的意思ide

创建一个只能够在本地登录的 不能操做的用用户名 discuz 密码为 ***** 已经加密了的 

而后第二句的意思是 ,给这个discuz用户操做discuz数据库的全部权限 

 

使用GRANT

 

GRANT命令用来创建新用户,指定用户口令并增长用户权限。其格式以下:

 

mysql>GRANT<privileges>ON<what> 

->TO<user> [IDENTIFIED BY"<password>"]

-> [WITHGRANT OPTION];

 

 

  正如你看到的,在这个命令中有许多待填的内容。让咱们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工做有一个了解。

 

  <privileges>是一个用逗号分隔的你想要赋予的权限的列表。你能够指定的权限能够分为三种类型:

 

  数据库/数据表/数据列权限:Alter: 修改已存在的数据表(例如增长/删除列)和索引。 

Create: 创建新的数据库或数据表。 

Delete: 删除表的记录。 

Drop: 删除数据表或数据库。 

INDEX: 创建或删除索引。 

Insert: 增长表的记录。 

Select: 显示/搜索表的记录。 

Update: 修改表中已存在的记录。 

 

  全局管理权限:

 

file: 在MySQL服务器上读写文件。 

PROCESS: 显示或杀死属于其它用户的服务线程。 

RELOAD: 重载访问控制表,刷新日志等。 

SHUTDOWN: 关闭MySQL服务。 

 

  特别的权限:

 

ALL: 容许作任何事(和root同样)。 

USAGE: 只容许登陆--其它什么也不容许作。

 

 

  这些权限所涉及到的MySQL的特征,其中的一些咱们至今还没看到,而其中的绝大部分是你所熟悉的。

 

<what> 定义了这些权限所做用的区域。*.*意味着权限对全部数据库和数据表有效。dbName.*意味着对名为dbName的数据库中的全部数据表有效。 dbName.tblName意味着仅对名为dbName中的名为tblName的数据表有效。你甚至还能够经过在赋予的权限后面使用圆括号中的数据列的列表以指定权限仅对这些列有效(在后面咱们将看到这样的例子)。

 

  <user>指定能够应用这些权限的用户。在MySQL中,一个用户经过它登陆的用户名和用户使用的计算机的主机名/IP地址来指定。这两个值均可以使用%通配符(例如kevin@%将容许使用用户名kevin从任何机器上登陆以享有你指定的权限)。

 

  <password>指定了用户链接MySQL服务所用的口令。它被用方括号括起,说明IDENTIFIEDBY"<password>"在GRANT命令中是可选项。这里指定的口令会取代用户原来的密码。若是没有为一个新用户指定口令,当他进行链接时就不须要口令。

 

这个命令中可选的WITHGRANT OPTION部分指定了用户可使用GRANT/REVOKE命令将他拥有的权限赋予其余用户。请当心使用这项功能--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的用户可能会相互共享他们的权限,这也许不是你当初想看到的。

 

  让咱们来看两个例子。创建一个名为dbmanager的用户,他可使用口令managedb从server.host.net链接 MySQL,并仅仅能够访问名为db的数据库的所有内容(并能够将此权限赋予其余用户),这可使用下面的GRANT命令:

 

mysql>GRANTALL ON db.* 

->TOdbmanager@server.host.net 

-> IDENTIFIED BY"managedb"

->WITHGRANT OPTION;

 

 

如今改变这个用户的口令为funkychicken,命令格式以下:

   mysql> GRANTUSAGE ON*.* 

   -> TOdbmanager@server.host.net 

   -> IDENTIFIED BY"funkychicken";

 

请注意咱们没有赋予任何另外的权限(the USAGE权限只能容许用户登陆),可是用户已经存在的权限不会被改变。

 

  如今让咱们创建一个新的名为jessica的用户,他能够从host.net域的任意机器链接到MySQL。他能够更新数据库中用户的姓名和 email地址,可是不须要查阅其它数据库的信息。也就是说他对db数据库具备只读的权限(例如,Select),可是他能够对Users表的name列和email列执行Update操做。命令以下:

 

mysql>GRANTSelect ON db.* 

->TOjessica@%.host.net 

-> IDENTIFIED BY"jessrules";

mysql>GRANTUpdate (name,email)ONdb.Users 

->TOjessica@%.host.net; 

 

 

  请注意在第一个命令中咱们在指定Jessica能够用来链接的主机名时使用了%(通配符)符号。此外,咱们也没有给他向其余用户传递他的权限的能力,由于咱们在命令的最后没有带上WITHGRANT OPTION。第二个命令示范了如何经过在赋予的权限后面的圆括号中用逗号分隔的列的列表对特定的数据列赋予权限。

 

-----------------------------------------------------

 

mysql>grantselect,insert,update,deleteon 111.* tohongdadbuser@"%"identified by"111";

 

 

 

 

测试环境:WIN32 mysql5.0.45  

 

 

首先要声明一下:通常状况下,修改MySQL密码,受权,是须要有mysql里的root权限的。

 

注:本操做是在WIN命令提示符下,phpMyAdmin一样适用。

    用户:phplamp  用户数据库:phplampDB 

 

1.新建用户。

 

//登陆MYSQL

@>mysql -u root -p 

@>密码

//建立用户

mysql>insertinto mysql.user(Host,User,Password)values("localhost","phplamp",password("1234"));

//刷新系统权限表

mysql>flushprivileges;

这样就建立了一个名为:phplamp  密码为:1234  的用户。 

 

而后登陆一下。

 

mysql>exit;

@>mysql -u phplamp -p 

@>输入密码

mysql>登陆成功

 

2.为用户受权。

 

//登陆MYSQL(有ROOT权限)。我里我以ROOT身份登陆.

@>mysql -u root -p 

@>密码

//首先为用户建立一个数据库(phplampDB)

mysql>createdatabase phplampDB; 

//受权phplamp用户拥有phplamp数据库的全部权限。

>grantall privileges on phplampDB.* tophplamp@localhost identified by'1234';

//刷新系统权限表

mysql>flushprivileges;

mysql>其它操做

 

/*

若是想指定部分权限给一用户,能够这样来写:

mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234'; 

//刷新系统权限表。

mysql>flush privileges; 

*/

 

3.删除用户。

@>mysql -u root -p 

@>密码

mysql>DELETEFROM user WHERE User="phplamp"and Host="localhost";

mysql>flushprivileges;

//删除用户的数据库

mysql>dropdatabase phplampDB; 

 

4.修改指定用户密码。

@>mysql -u root -p 

@>密码

mysql>updatemysql.userset password=password('新密码')whereUser="phplamp"and Host="localhost";

mysql>flushprivileges;

 

-------------------------------------------------

 

mysql>grantall privileges on webgame_test.* towebgametest@10.3.18.158 identified by'gametestdb';

Query OK, 0 rowsaffected (0.01 sec) 

 

mysql> flush privileges;

Query OK, 0 rowsaffected (0.01 sec) 

 

mysql> exit; 

 

show grants forwebgametest@10.3.18.158;

 



MYSQL用户权限管理GRANT使用

GRANT语句的语法:

 
  1. mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by "链接口令";

看上去像这样:

  
 
  
 
  
 
   
   
   
   
 
  
  1. GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户所有权限。
当数据库名称.表名称被*.*代替,表示赋予用户操做服务器上全部数据库全部表的权限。
用户地址能够是localhost,也能够是ip地址、机器名字、域名。也能够用’%'表示从任何地址链接。
‘链接口令’不能为空,不然建立失败。
要使用该语句,你须要填写下列部分:
privileges 

授予用户的权限,下表列出可用于GRANT语句的权限指定符:

权限指定符

权限容许的操做

ALTER 修改表和索引

CREATE 建立数据库和表

DELETE 删除表中已有的记录

DROP 抛弃(删除)数据库和表

INDEX 建立或抛弃索引

INSERT 向表中插入新行

REFERENCE 未用

SELECT 检索表中的记录

UPDATE 修改现存表记录

FILE 读或写服务器上的文件

PROCESS 查看服务器中执行的线程信息或杀死线程

RELOAD 重载受权表或清空日志、主机缓存或表缓存。

SHUTDOWN 关闭服务器

ALL 全部;ALL PRIVILEGES同义词

USAGE 特殊的“无权限”权限

上表显示在第一组的权限指定符适用于数据库、表和列,第二组数管理权限。通常,这些被相对严格地受权,由于它们容许用户影响服务器的操做。第三组权限特殊,ALL意味着“全部权限”,UASGE意味着无权限,即建立用户,但不授予权限。

columns 

权限运用的列,它是可选的,而且你只能设置列特定的权限。若是命令有多于一个列,应该用逗号分开它们。

what

权限运用的级别。权限能够是全局的(适用于全部数据库和全部表)、特定数据库(适用于一个数据库中的全部表)或特定表的。能够经过指定一个columns字句是权限是列特定的。

user

权限授予的用户,它由一个用户名和主机名组成。在MySQL中,你不只指定谁能链接,还有从哪里链接。这容许你让两个同名用户从不一样地方链接。MySQL让你区分他们,并彼此独立地赋予权限。

MySQL中的一个用户名就是你链接服务器时指定的用户名,该名字没必要与你的Unix登陆名或Windows名联系起来。缺省地,若是你不明确指定一个名字,客户程序将使用你的登陆名做为MySQL用户名。这只是一个约定。你能够在受权表中将该名字改成nobody,而后以nobody链接执行须要超级用户权限的操做。

password

赋予用户的口令,它是可选的。若是你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不安全)。对现有用户,任何你指定的口令将代替老口令。若是你不指定口令,老口令保持不变,当你用IDENTIFIED BY时,口令字符串用改用口令的字面含义,GRANT将为你编码口令,不要象你用SET PASSWORD 那样使用password()函数。

WITH GRANT OPTION子句是可选的。若是你包含它,用户能够授予权限经过GRANT语句受权给其它用户。你能够用该子句给与其它用户受权的能力。

用户名、口令、数据库和表名在受权表记录中是大小写敏感的,主机名和列名不是。

实例

 
  1. mysql>grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by 123′;

给来自10.163.225.87的用户joe分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操做的权限,并设定口令为123。

 
  1. mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by 123′;

给来自10.163.225.87的用户joe分配可对数据库vtdc全部表进行全部操做的权限,并设定口令为123。

 
  1. mysql>grant all privileges on *.* to joe@10.163.225.87 identified by 123′;

给来自10.163.225.87的用户joe分配可对全部数据库的全部表进行全部操做的权限,并设定口令为123。

 
  1. mysql>grant all privileges on *.* to joe@localhost identified by 123′;

给本机用户joe分配可对全部数据库的全部表进行全部操做的权限,并设定口令为123。

最后记得刷新权限,让其生效

 
  1. flush privileges;
相关文章
相关标签/搜索