mysql的grant⽤法(转)
GRANT USAGE ON *.* TO IDENTIFIED BY PASSWORD '*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB';
GRANT ALL PRIVILEGES ON `discuz`.* TO ;
我先按我的理解解释⼀下上⾯两句的意思
建⽴⼀个只可以在本地登陆的不能操作的⽤⽤户名 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从任何机器上登录以享有你指定的权限)。
<password>指定了⽤户连接MySQL服务所⽤的⼝令。它被⽤⽅括号括起,说明IDENTIFIED BY "<password>"在GRANT命令中是可选项。这⾥指定的⼝令会取代⽤户原来的密码。如果没有为⼀个新⽤户指定⼝令,当他进⾏连接时就不需要⼝令。
这个命令中可选的WITH GRANT OPTION部分指定了⽤户可以使⽤GRANT/REVOKE命令将他拥有的权限赋予其他⽤户。请⼩⼼使⽤这项功能--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的⽤户可能会相互共享他们的权限,这也许不是你当初想看到的。
让我们来看两个例⼦。建⽴⼀个名为dbmanager的⽤户,他可以使⽤⼝令managedb从server.host连接MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他⽤户),这可以使⽤下⾯的GRANT命令:
mysql> GRANT ALL ON db.*
-> TO
-
> IDENTIFIED BY "managedb"
-> WITH GRANT OPTION;
现在改变这个⽤户的⼝令为funkychicken,命令格式如下:
mysql> GRANT USAGE ON *.*
-> TO
-> IDENTIFIED BY "funkychicken";
请注意我们没有赋予任何另外的权限(the USAGE权限只能允许⽤户登录),但是⽤户已经存在的权限不会被改变。
现在让我们建⽴⼀个新的名为jessica的⽤户,他可以从host域的任意机器连接到MySQL。他可以更新数据库中⽤户的姓名和email 地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,Select),但是他可以对Users表的name列和email列执⾏Update操作。命令如下:
mysql> GRANT Select ON db.*
-
> TO
-> IDENTIFIED BY "jessrules";
mysql> GRANT Update (name,email) ON db.Users
-> TO ;
请注意在第⼀个命令中我们在指定Jessica可以⽤来连接的主机名时使⽤了%(通配符)符号。此外,我们也没有给他向其他⽤户传递他的权限的能⼒,因为我们在命令的最后没有带上WITH GRANT OPTION。第⼆个命令⽰范了如何通过在赋予的权限后⾯的圆括号中⽤逗号分隔的列的列表对特定的数据列赋予权限。
mysql中授权命令grant详解:
mysql中可以给你⼀个⽤户授予如select,insert,update,delete等其中的⼀个或者多个权限,主要使⽤grant命令,格式为:
grant 权限 on 数据库对象 to ⽤户
⼀、grant 普通数据⽤户,查询、插⼊、更新、删除数据库中所有表数据的权利。
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%'
或者,⽤⼀条 MySQL 命令来替代:
grant select, insert, update, delete on testdb.* to common_user@'%'
⼆、grant 数据库开发⼈员,创建表、索引、视图、存储过程、函数。。。等权限。
grant 创建、修改、删除 MySQL 数据表结构权限。
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
grant drop on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 外键权限。
grant references on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 临时表权限。
grant create temporary tables on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 索引权限。
grant index on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 视图、查看视图源代码权限。
grant create view on testdb.* to developer@'192.168.0.%';
grant show view on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 存储过程、函数权限。
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure
grant execute on testdb.* to developer@'192.168.0.%';
三、grant 普通 DBA 管理某个 MySQL 数据库的权限。
mysql视图和存储过程 grant all privileges on testdb to dba@'localhost'
其中,关键字 "privileges" 可以省略。
四、grant ⾼级 DBA 管理 MySQL 中所有数据库的权限。
grant all on *.* to dba@'localhost'
五、MySQL grant 权限,分别可以作⽤在多个层次上。
1. grant 作⽤在整个 MySQL 服务器上:
grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库
2. grant 作⽤在单个数据库上:
grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。
3. grant 作⽤在单个数据表上:
grant select, insert, update, delete ders to dba@localhost;
4. grant 作⽤在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 作⽤在存储过程、函数上:
grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'
六、查看 MySQL ⽤户权限
查看当前⽤户(⾃⼰)权限:
show grants;
查看其他 MySQL ⽤户权限:
show grants for dba@localhost;
七、撤销已经赋予给 MySQL ⽤户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 "to" 换成 "from" 即可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
⼋、MySQL grant、revoke ⽤户权限注意事项
1. grant, revoke ⽤户权限后,该⽤户只有重新连接 MySQL 数据库,权限才能⽣效。
2. 如果想让授权的⽤户,也可以将这些权限 grant 给其他⽤户,需要选项 "grant option"
grant select on testdb.* to dba@localhost with grant option;
这个⼀般⽤不到。实际中,数据库权限最好由 DBA 来统⼀管理。
MySQL的权限系统围绕着两个概念:
认证->确定⽤户是否允许连接数据库服务器
授权->确定⽤户是否拥有⾜够的权限执⾏查询请求等。
如果认证不成功的话,哪么授权肯定是⽆法进⾏的。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from”
表 GRANT和REVOKE管理的权限
权限描述
ALL PRIVILEGES影响除WITH GRANT OPTION之外的所有权限
ALTER影响ALTER TABLE命令的使⽤
ALTER ROUTINE影响创建存储例程的能⼒
CREATE影响CREATE TABLE命令的使⽤
CREATE ROUTINE影响更改和弃⽤存储例程的能⼒
CREATE TEMPORARY
影响CREATE TEMPORARY TABLE命令的使⽤
TABLES
CREATE USER影响创建、弃⽤;重命名和撤销⽤户权限的能⼒
CREATE VIEW影响CREATE VIEW命令的使⽤
DELETE影响DELETE命令的使⽤
DROP影响DROP TABLE命令的使⽤
EXECUTE影响⽤户运⾏存储过程的能⼒
EVENT影响执⾏事件的能⼒(从MySQL5.1.6开始)
FILE影响SELECT INTO OUTFILE和LOAD DATA INFILE的使⽤
GRANT OPTION影响⽤户委派权限的能⼒
INDEX影响CREATE INDEX和DROP INDEX命令的使⽤
INSERT影响INSERT命令的使⽤
LOCK TABLES影响LOCK TABLES命令的使⽤
PROCESS影响SHOW PROCESSLIST命令的使⽤
REFERENCES未来MySQL特性的占位符
RELOAD影响FLUSH命令集的使⽤
REPLICATION CLIENT影响⽤户查询从服务器和主服务器位置的能⼒
(续)
权限描述
REPLICATION SLAVE复制从服务器所需的权限
SELECT影响SELECT命令的使⽤
SELECT影响SELECT命令的使⽤
SHOW DATABASES影响SHOW DATABASES命令的使⽤
SHOW VIEW影响SHOW CREATE VIEW命令的使⽤
SHUTDOWN影响SHUTDOWN命令的使⽤
SUPER影响管理员级命令的使⽤,如CHANGE、MASTER、KILL
thread、mysqladmin debug、PURGE MASTER LOGS和SET
GLOBAL
TRIGGER影响执⾏触发器的能⼒(从MySQL5.1.6开始)
UPDATE影响UPDATE命令的使⽤
USAGE只连接,不授予权限
1>.改表法。你的帐号不允许从远程登陆MySql服务器,只能在localhost。
解决办法:
在localhost的那台电脑,登⼊mysql后,更改 "mysql" 数据库⾥的 "user" 表⾥的 "host" 项,从"localhost"改称"%"
(1). mysql -u root -pvmwaremysql>use mysql;
(2). mysql>update user set host = '%' where user = 'root';
(3). mysql>select host, user from user;
2>. 授权法。例如,你想myuser使⽤mypassword从任何主机连接到mysql服务器的话。
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
如果你想允许⽤户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使⽤mypassword作为密码
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
如果你想允许⽤户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使⽤mypassword作为密码
(1). GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(3). FLUSH PRIVILEGES;
注意:授权后必须FLUSH PRIVILEGES;否则⽆法⽴即⽣效。
另外⼀种⽅法:
3>.在安装mysql的机器上运⾏:
1、d:\mysql\bin\>mysql -h localhost -u root
/
/这样应该可以进⼊MySQL服务器
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
//赋予任何主机访问数据的权限
3、mysql>FLUSH PRIVILEGES
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论