001
GRANT
USAGE
ON
*.*
TO
'discuz'
@
'localhost'
IDENTIFIED
BY
PASSWORD
'*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB'
;
002
GRANT
ALL
PRIVILEGES
ON
`discuz`.*
TO
'discuz'
@
'localhost'
;
003
004
我先按我的理解解释一下上面两句的意思
005
建立一个只可以在本地登陆的 不能操作的用用户名 discuz 密码为 ***** 已经加密了的
006
然后第二句的意思是 ,给这个discuz用户操作discuz数据库的所有权限
007
008
使用
GRANT
009
010
GRANT
命令用来建立新用户,指定用户口令并增加用户权限。其格式如下:
011
012
mysql>
GRANT
<
privileges
>
ON
<what>
013
->
TO
<
user
> [IDENTIFIED
BY
"<password>"
]
014
-> [
WITH
GRANT
OPTION
];
015
016
017
正如你看到的,在这个命令中有许多待填的内容。让我们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工作有一个了解。
018
019
<
privileges
>是一个用逗号分隔的你想要赋予的权限的列表。你可以指定的权限可以分为三种类型:
020
021
数据库/数据表/数据列权限:
Alter
: 修改已存在的数据表(例如增加/删除列)和索引。
022
Create
: 建立新的数据库或数据表。
023
Delete
: 删除表的记录。
024
Drop
: 删除数据表或数据库。
025
INDEX
: 建立或删除索引。
026
Insert
: 增加表的记录。
027
Select
: 显示/搜索表的记录。
028
Update
: 修改表中已存在的记录。
029
030
全局管理权限:
031
032
file: 在MySQL服务器上读写文件。
033
PROCESS: 显示或杀死属于其它用户的服务线程。
034
RELOAD: 重载访问控制表,刷新日志等。
035
SHUTDOWN: 关闭MySQL服务。
036
037
特别的权限:
038
039
ALL
: 允许做任何事(和root一样)。
040
USAGE: 只允许登录
041
042
043
这些权限所涉及到的MySQL的特征,其中的一些我们至今还没看到,而其中的绝大部分是你所熟悉的。
044
045
<what> 定义了这些权限所作用的区域。*.*意味着权限对所有数据库和数据表有效。dbName.*意味着对名为dbName的数据库中的所有数据表有效。 dbName.tblName意味着仅对名为dbName中的名为tblName的数据表有效。你甚至还可以通过在赋予的权限后面使用圆括号中的数据列的列表以指定权限仅对这些列有效(在后面我们将看到这样的例子)。
046
047
<
user
>指定可以应用这些权限的用户。在MySQL中,一个用户通过它登录的用户名和用户使用的计算机的主机名/IP地址来指定。这两个值都可以使用%通配符(例如kevin@%将允许使用用户名kevin从任何机器上登录以享有你指定的权限)。
048
049
<
password
>指定了用户连接MySQL服务所用的口令。它被用方括号括起,说明IDENTIFIED
BY
"<password>"
在
GRANT
命令中是可选项。这里指定的口令会取代用户原来的密码。如果没有为一个新用户指定口令,当他进行连接时就不需要口令。
050
051
这个命令中可选的
WITH
GRANT
OPTION
部分指定了用户可以使用
GRANT
/
REVOKE
命令将他拥有的权限赋予其他用户。请小心使用这项功能
052
053
让我们来看两个例子。建立一个名为dbmanager的用户,他可以使用口令managedb从server.host.net连接 MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他用户),这可以使用下面的
GRANT
命令:
054
055
mysql>
GRANT
ALL
ON
db.*
056
->
TO
dbmanager@server.host.net
057
-> IDENTIFIED
BY
"managedb"
058
->
WITH
GRANT
OPTION
;
059
060
061
现在改变这个用户的口令为funkychicken,命令格式如下:
062
mysql>
GRANT
USAGE
ON
*.*
063
->
TO
dbmanager@server.host.net
064
-> IDENTIFIED
BY
"funkychicken"
;
065
066
请注意我们没有赋予任何另外的权限(the USAGE权限只能允许用户登录),但是用户已经存在的权限不会被改变。
067
068
现在让我们建立一个新的名为jessica的用户,他可以从host.net域的任意机器连接到MySQL。他可以更新数据库中用户的姓名和 email地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,
Select
),但是他可以对Users表的
name
列和email列执行
Update
操作。命令如下:
069
070
mysql>
GRANT
Select
ON
db.*
071
->
TO
jessica@%.host.net
072
-> IDENTIFIED
BY
"jessrules"
;
073
mysql>
GRANT
Update
(
name
,email)
ON
db.Users
074
->
TO
jessica@%.host.net;
075
076
077
请注意在第一个命令中我们在指定Jessica可以用来连接的主机名时使用了%(通配符)符号。此外,我们也没有给他向其他用户传递他的权限的能力,因为我们在命令的最后没有带上
WITH
GRANT
OPTION
。第二个命令示范了如何通过在赋予的权限后面的圆括号中用逗号分隔的列的列表对特定的数据列赋予权限。
078
079
080
081
mysql>
grant
select
,
insert
,
update
,
delete
on
111.*
to
hongdadbuser@
"%"
identified
by
"111"
;
082
083
084
085
086
测试环境:WIN32 mysql5.0.45
087
088
089
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。
090
091
注:本操作是在WIN命令提示符下,phpMyAdmin同样适用。
092
用户:phplamp 用户数据库:phplampDB
093
094
1.新建用户。
095
096
//登录MYSQL
097
@>mysql -u root -p
098
@>密码
099
//创建用户
100
mysql>
insert
into
mysql.
user
(Host,
User
,
Password
)
values
(
"localhost"
,
"phplamp"
,
password
(
"1234"
));
101
//刷新系统权限表
102
mysql>flush
privileges
;
103
这样就创建了一个名为:phplamp 密码为:1234 的用户。
104
105
然后登录一下。
106
107
mysql>exit;
108
@>mysql -u phplamp -p
109
@>输入密码
110
mysql>登录成功
111
112
2.为用户授权。
113
114
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
115
@>mysql -u root -p
116
@>密码
117
//首先为用户创建一个数据库(phplampDB)
118
mysql>
create
database
phplampDB;
119
//授权phplamp用户拥有phplamp数据库的所有权限。
120
>
grant
all
privileges
on
phplampDB.*
to
phplamp@localhost identified
by
'1234'
;
121
//刷新系统权限表
122
mysql>flush
privileges
;
123
mysql>其它操作
124
125
/*
126
如果想指定部分权限给一用户,可以这样来写:
127
mysql>
grant
select
,
update
on
phplampDB.*
to
phplamp@localhost identified
by
'1234'
;
128
//刷新系统权限表。
129
mysql>flush
privileges
;
130
*/
131
132
3.删除用户。
133
@>mysql -u root -p
134
@>密码
135
mysql>
DELETE
FROM
user
WHERE
User
=
"phplamp"
and
Host=
"localhost"
;
136
mysql>flush
privileges
;
137
//删除用户的数据库
138
mysql>
drop
database
phplampDB;
139
140
4.修改指定用户密码。
141
@>mysql -u root -p
142
@>密码
143
mysql>
update
mysql.
user
set
password
=
password
(
'新密码'
)
where
User
=
"phplamp"
and
Host=
"localhost"
;
144
mysql>flush
privileges
;
145
146
147
148
mysql>
grant
all
privileges
on
webgame_test.*
to
webgametest@10.3.18.158 identified
by
'gametestdb'
;
149
Query OK, 0
rows
affected (0.01 sec)
150
151
mysql> flush
privileges
;
152
Query OK, 0
rows
affected (0.01 sec)
153
154
mysql> exit;
155
156
show grants
for
webgametest@10.3.18.158;