代码片段:查看用户权限
1.show grants
for
你的用户;
show grants
for
root@
'localhost'
;
show
create
database
dbname; 这个可以看到创建数据库时用到的一些参数。
show
create
table
tickets; 可以看到创建表时用到的一些参数
2.
GRANT
USAGE
ON
*.*
TO
'discuz'
@
'localhost'
IDENTIFIED
BY
PASSWORD
'*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB'
;
GRANT
ALL
PRIVILEGES
ON
`discuz`.*
TO
'discuz'
@
'localhost'
;
我先按我的理解解释一下上面两句的意思
建立一个只可以在本地登陆的 不能操作的用用户名 discuz 密码为 ***** 已经加密了的
然后第二句的意思是 ,给这个discuz用户操作discuz数据库的所有权限
使用
GRANT
GRANT
命令用来建立新用户,指定用户口令并增加用户权限。其格式如下:
mysql>
GRANT
<
privileges
>
ON
<what>
->
TO
<
user
> [IDENTIFIED
BY
"<password>"
]
-> [
WITH
GRANT
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服务所用的口令。它被用方括号括起,说明IDENTIFIED
BY
"<password>"
在
GRANT
命令中是可选项。这里指定的口令会取代用户原来的密码。如果没有为一个新用户指定口令,当他进行连接时就不需要口令。
这个命令中可选的
WITH
GRANT
OPTION
部分指定了用户可以使用
GRANT
/
REVOKE
命令将他拥有的权限赋予其他用户。请小心使用这项功能
--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的用户可能会相互共享他们的权限,这也许不是你当初想看到的。
让我们来看两个例子。建立一个名为dbmanager的用户,他可以使用口令managedb从server.host.net连接 MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他用户),这可以使用下面的
GRANT
命令:
mysql>
GRANT
ALL
ON
db.*
-> IDENTIFIED
BY
"managedb"
->
WITH
GRANT
OPTION
;
现在改变这个用户的口令为funkychicken,命令格式如下:
mysql>
GRANT
USAGE
ON
*.*
-> IDENTIFIED
BY
"funkychicken"
;
请注意我们没有赋予任何另外的权限(the USAGE权限只能允许用户登录),但是用户已经存在的权限不会被改变。
现在让我们建立一个新的名为jessica的用户,他可以从host.net域的任意机器连接到MySQL。他可以更新数据库中用户的姓名和 email地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,
Select
),但是他可以对Users表的
name
列和email列执行
Update
操作。命令如下:
mysql>
GRANT
Select
ON
db.*
->
TO
jessica@%.host.net
-> IDENTIFIED
BY
"jessrules"
;
mysql>
GRANT
Update
(
name
,email)
ON
db.Users
->
TO
jessica@%.host.net;
请注意在第一个命令中我们在指定Jessica可以用来连接的主机名时使用
mysql>
grant
select
,
insert
,
update
,
delete
on
111.*
to
hongdadbuser@
"%"
identified
by
"111"
;
测试环境:WIN32 mysql5.0.45
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。
注:本操作是在WIN命令提示符下,phpMyAdmin同样适用。
用户:phplamp 用户数据库:phplampDB
1.新建用户。
//登录MYSQL
@>mysql -u root -p
@>密码
//创建用户
mysql>
insert
into
mysql.
user
(Host,
User
,
Password
)
values
(
"localhost"
,
"phplamp"
,
password
(
"1234"
));
//刷新系统权限表
mysql>flush
privileges
;
这样就创建了一个名为:phplamp 密码为:1234 的用户。
然后登录一下。
mysql>exit;
@>mysql -u phplamp -p
@>输入密码
mysql>登录成功
2.为用户授权。
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
@>mysql -u root -p
@>密码
//首先为用户创建一个数据库(phplampDB)
mysql>
create
database
phplampDB;
//授权phplamp用户拥有phplamp数据库的所有权限。
>
grant
all
privileges
on
phplampDB.*
to
phplamp@localhost identified
by
'1234'
;
//刷新系统权限表
mysql>flush
privileges
;
mysql>其它操作
/*
如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系统权限表。
mysql>flush privileges;
*/
3.删除用户。
@>mysql -u root -p
@>密码
mysql>
DELETE
FROM
user
WHERE
User
=
"phplamp"
and
Host=
"localhost"
;
mysql>flush
privileges
;
//删除用户的数据库
mysql>
drop
database
phplampDB;
4.修改指定用户密码。
@>mysql -u root -p
@>密码
mysql>
update
mysql.
user
set
password
=
password
(
'新密码'
)
where
User
=
"phplamp"
and
Host=
"localhost"
;
mysql>flush
privileges
;
-------------------------------------------------
Query OK, 0
rows
affected (0.01 sec)
mysql> flush
privileges
;
Query OK, 0
rows
affected (0.01 sec)
mysql> exit;