查看用户权限
showgrantsfor你的用户;
showgrantsforroot@'localhost';
showgrantsforwebgametest@10.3.18.158;
showcreatedatabasedbname;这个可以看到创建数据库时用到的一些参数。
showcreatetabletickets;可以看到创建表时用到的一些参数
使用用户权限
GRANTUSAGEON*.*TO'discuz'@'localhost'IDENTIFIEDBYPASSWORD'*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB';
GRANTALLPRIVILEGESON`discuz`.*TO'discuz'@'localhost';
我先按我的理解解释一下上面两句的意思
建立一个只可以在本地登陆的不能操作的用用户名discuz密码为*****已经加密了的
然后第二句的意思是,给这个discuz用户操作discuz数据库的所有权限
使用GRANT
GRANT命令用来建立新用户,指定用户口令并增加用户权限。其格式如下:
mysql>GRANT<privileges>ON<what>
->TO<user>[IDENTIFIEDBY"<password>"]
->[WITHGRANTOPTION];
正如你看到的,在这个命令中有许多待填的内容。让我们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工作有一个了解。
<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命令中是可选项。这里指定的口令会取代用户原来的密码。如果没有为一个新用户指定口令,当他进行连接时就不需要口令。
这个命令中可选的WITHGRANTOPTION部分指定了用户可以使用GRANT/REVOKE命令将他拥有的权限赋予其他用户。请小心使用这项功能--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的用户可能会相互共享他们的权限,这也许不是你当初想看到的。
让我们来看两个例子。建立一个名为dbmanager的用户,他可以使用口令managedb从server.host.net连接MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他用户),这可以使用下面的GRANT命令:
mysql>GRANTALLONdb.*
->TOdbmanager@server.host.net
->IDENTIFIEDBY"managedb"
->WITHGRANTOPTION;
现在改变这个用户的口令为funkychicken,命令格式如下:
mysql>GRANTUSAGEON*.*
->TOdbmanager@server.host.net
->IDENTIFIEDBY"funkychicken";
请注意我们没有赋予任何另外的权限(theUSAGE权限只能允许用户登录),但是用户已经存在的权限不会被改变。
现在让我们建立一个新的名为jessica的用户,他可以从host.net域的任意机器连接到MySQL。他可以更新数据库中用户的姓名和email地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,Select),但是他可以对Users表的name列和email列执行Update操作。命令如下:
mysql>GRANTSelectONdb.*
->TOjessica@%.host.net
->IDENTIFIEDBY"jessrules";
mysql>GRANTUpdate(name,email)ONdb.Users
->TOjessica@%.host.net;
请注意在第一个命令中我们在指定Jessica可以用来连接的主机名时使用了%(通配符)符号。此外,我们也没有给他向其他用户传递他的权限的能力,因为我们在命令的最后没有带上WITHGRANTOPTION。第二个命令示范了如何通过在赋予的权限后面的圆括号中用逗号分隔的列的列表对特定的数据列赋予权限。
-----------------------------------------------------
mysql>grantselect,insert,update,deleteon111.*tohongdadbuser@"%"identifiedby"111";
测试环境:WIN32mysql5.0.45
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。
注:本操作是在WIN命令提示符下,phpMyAdmin同样适用。
用户:phplamp用户数据库:phplampDB
1.新建用户。
//登录MYSQL
@>mysql-uroot-p
@>密码
//创建用户
mysql>insertintomysql.user(Host,User,Password)values("localhost","phplamp",password("1234"));
//刷新系统权限表
mysql>flushprivileges;
这样就创建了一个名为:phplamp密码为:1234的用户。
然后登录一下。
mysql>exit;
@>mysql-uphplamp-p
@>输入密码
mysql>登录成功
2.为用户授权。
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
@>mysql-uroot-p
@>密码
//首先为用户创建一个数据库(phplampDB)
mysql>createdatabasephplampDB;
//授权phplamp用户拥有phplamp数据库的所有权限。
>grantallprivilegesonphplampDB.*tophplamp@localhostidentifiedby'1234';
//刷新系统权限表
mysql>flushprivileges;
mysql>其它操作
/*
如果想指定部分权限给一用户,可以这样来写:
mysql>grantselect,updateonphplampDB.*tophplamp@localhostidentifiedby'1234';
//刷新系统权限表。
mysql>flushprivileges;
*/
3.删除用户。
@>mysql-uroot-p
@>密码
mysql>DELETEFROMuserWHEREUser="phplamp"andHost="localhost";
mysql>flushprivileges;
//删除用户的数据库
mysql>dropdatabasephplampDB;
4.修改指定用户密码。
@>mysql-uroot-p
@>密码
mysql>updatemysql.usersetpassword=password('新密码')whereUser="phplamp"andHost="localhost";
mysql>flushprivileges;
-------------------------------------------------
mysql>grantallprivilegesonwebgame_test.*towebgametest@10.3.18.158identifiedby'gametestdb';
QueryOK,0rowsaffected(0.01sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.01sec)
mysql>exit;
showgrantsforwebgametest@10.3.18.158;
MYSQL用户权限管理GRANT使用
GRANT语句的语法:
mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by "连接口令";
看上去像这样:
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语句授权给其它用户。你可以用该子句给与其它用户授权的能力。
用户名、口令、数据库和表名在授权表记录中是大小写敏感的,主机名和列名不是。
实例
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。
- mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。
mysql>grant all privileges on *.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
- mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
最后记得刷新权限,让其生效
- flush privileges;