mysql数据库权限 mysql 如何查看该数据库用户具有哪些权限
大家好,今天来为大家解答mysql数据库权限这个问题的一些问题点,包括mysql 如何查看该数据库用户具有哪些权限也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
mysql 如何查看该数据库用户具有哪些权限
1、use mysql
2、SELECT*FROMusers
就可以看到所有的使用者权限
有关db的数据是记录在Db(大小写要注意)这个数据表中,所以只要呼叫出Db的资料SELECT*FROMDb就可以看到你要的答案。
或者可以用:
SELECT*FROMDbWHEREDb='phplampDB'找出你要的答案
授予MySQL用户权限的语句
show grants for你的用户
比如:show grants for root@'localhost';
Grant用法:
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];
mysql怎么授予创建数据库的权限
MySQL命令行能否实现新建用户呢?答案无疑是肯定的。而且在使用使用MySQL命令行新建用户后,还可以为用户授予权限。
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。
注:本操作是在WIN命令提示符下,phpMyAdmin同样适用。
用户:phplamp
用户数据库:phplampDB
1.MySQL命令行新建用户
//登录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命令行为用户授权
//登录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';//这里需要注意,如果发现找不到用户,需要执行命令 flush privilieges;
//刷新系统权限表
mysql>flush privileges;
mysql>其它操作
//如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by'1234';
//刷新系统权限表。
mysql>flush privileges;
mysql> grant权限1,权限2,…权限n on数据库名称.表名称 to用户名@用户地址 identified by‘连接口令’;
权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。
例如:
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。
MySQL的权限有哪些
一.权限表
mysql数据库中的3个权限表:user、db、 host
权限表的存取过程是:
1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;
2)通过权限验证,进行权限分配时,按照useràdbàtables_privàcolumns_priv的顺序进行分配。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
二.MySQL各种权限(共27个)
(以下操作都是以root身份登陆进行grant授权,以p1@localhost身份登陆执行各种命令。)
1. usage
连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。
mysql> grant usage on*.* to‘p1′@’localhost’ identified by‘123′;
该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。
2. select
必须有select的权限,才可以使用select table
mysql> grant select on pyt.* to‘p1′@’localhost’;
mysql> select* from shop;
3. create
必须有create的权限,才可以使用create table
mysql> grant create on pyt.* to‘p1′@’localhost’;
4. create routine
必须具有create routine的权限,才可以使用{create|alter|drop}{procedure|function}
mysql> grant create routine on pyt.* to‘p1′@’localhost’;
当授予create routine时,自动授予EXECUTE, ALTER ROUTINE权限给它的创建者:
mysql> show grants for‘p1′@’localhost’;
+—————————————————————————+
Grants for p1@localhost
+————————————————————————–+
| GRANT USAGE ON*.* TO‘p1′@’localhost’ IDENTIFIED BY PASSWORD‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′|
| GRANT SELECT, CREATE, CREATE ROUTINE ON `pyt`.* TO‘p1′@’localhost’|
| GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `pyt`.`pro_shop1` TO‘p1′@’localhost’|
+————————————————————————————-+
5. create temporary tables(注意这里是tables,不是table)
必须有create temporary tables的权限,才可以使用create temporary tables.
mysql> grant create temporary tables on pyt.* to‘p1′@’localhost’;
[mysql@mydev~]$ mysql-h localhost-u p1-p pyt
mysql> create temporary table tt1(id int);
6. create view
必须有create view的权限,才可以使用create view
mysql> grant create view on pyt.* to‘p1′@’localhost’;
mysql> create view v_shop as select price from shop;
7. create user
要使用CREATE USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
mysql> grant create user on*.* to‘p1′@’localhost’;
或:mysql> grant insert on*.* to p1@localhost;
8. insert
必须有insert的权限,才可以使用insert into….. values….
9. alter
必须有alter的权限,才可以使用alter table
alter table shop modify dealer char(15);
10. alter routine
必须具有alter routine的权限,才可以使用{alter|drop}{procedure|function}
mysql>grant alter routine on pyt.* to‘p1′@’ localhost‘;
mysql> drop procedure pro_shop;
Query OK, 0 rows affected(0.00 sec)
mysql> revoke alter routine on pyt.* from‘p1′@’localhost’;
[mysql@mydev~]$ mysql-h localhost-u p1-p pyt
mysql> drop procedure pro_shop;
ERROR 1370(42000): alter routine command denied to user‘p1′@’localhost’ for routine‘pyt.pro_shop’
11. update
必须有update的权限,才可以使用update table
mysql> update shop set price=3.5 where article=0001 and dealer=’A';
12. delete
必须有delete的权限,才可以使用delete from….where….(删除表中的记录)
13. drop
必须有drop的权限,才可以使用drop database db_name; drop table tab_name;
drop view vi_name; drop index in_name;
14. show database
通过show database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。
对于p1@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:
mysql> show databases;
+——————–+
| Database|
+——————–+
| information_schema|
| pyt|
| test|
+——————–+
15. show view
必须拥有show view权限,才能执行show create view。
mysql> grant show view on pyt.* to p1@localhost;
mysql> show create view v_shop;
16. index
必须拥有index权限,才能执行[create|drop] index
mysql> grant index on pyt.* to p1@localhost;
mysql> create index ix_shop on shop(article);
mysql> drop index ix_shop on shop;
17. excute
执行存在的Functions,Procedures
mysql> call pro_shop1(0001,@a);
+———+
| article|
+———+
| 0001|
| 0001|
+———+
mysql> select@a;
+——+
|@a|
+——+
| 2|
+——+
18. lock tables
必须拥有lock tables权限,才可以使用lock tables
mysql> grant lock tables on pyt.* to p1@localhost;
mysql> lock tables a1 read;
mysql> unlock tables;
19. references
有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。
20. reload
必须拥有reload权限,才可以执行flush [tables| logs| privileges]
mysql> grant reload on pyt.* to p1@localhost;
ERROR 1221(HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant reload on*.* to‘p1′@’localhost’;
Query OK, 0 rows affected(0.00 sec)
mysql> flush tables;
21. replication client
拥有此权限可以查询master server、slave server状态。
mysql> show master status;
ERROR 1227(42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation
mysql> grant Replication client on*.* to p1@localhost;
或:mysql> grant super on*.* to p1@localhost;
mysql> show master status;
+——————+———-+————–+——————+
| File| Position| Binlog_Do_DB| Binlog_Ignore_DB|
+——————+———-+————–+——————+
| mysql-bin.000006| 2111|||
+——————+———-+————–+——————+
mysql> show slave status;
22. replication slave
拥有此权限可以查看从服务器,从主服务器读取二进制日志。
mysql> show slave hosts;
ERROR 1227(42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql> show binlog events;
ERROR 1227(42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql> grant replication slave on*.* to p1@localhost;
mysql> show slave hosts;
Empty set(0.00 sec)
mysql>show binlog events;
+—————+——-+—————-+———–+————-+————–+
| Log_name| Pos| Event_type| Server_id| End_log_pos|Info|+—————+——-+————–+———–+————-+—————+
| mysql-bin.000005| 4| Format_desc| 1| 98| Server ver: 5.0.77-log, Binlog ver: 4||mysql-bin.000005|98|Query|1|197|use `mysql`; create table a1(i int)engine=myisam|
……………………………………
23. Shutdown
关闭MySQL:
[mysql@mydev~]$ mysqladmin shutdown
重新连接:
[mysql@mydev~]$ mysql
ERROR 2002(HY000): Can’t connect to local MySQL server through socket‘/tmp/mysql.sock’(2)
[mysql@mydev~]$ cd/u01/mysql/bin
[mysql@mydev bin]$./mysqld_safe&
[mysql@mydev bin]$ mysql
24. grant option
拥有grant option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限)
mysql> grant Grant option on pyt.* to p1@localhost;
mysql> grant select on pyt.* to p2@localhost;
25. file
拥有file权限才可以执行 select..into outfile和load data infile…操作,但是不要把file, process, super权限授予管理员以外的账号,这样存在严重的安全隐患。
mysql> grant file on*.* to p1@localhost;
mysql> load data infile‘/home/mysql/pet.txt’ into table pet;
26. super
这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS。
mysql> grant super on*.* to p1@localhost;
mysql> purge master logs before‘mysql-bin.000006′;
27. process
通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。
mysql> show processlist;
+—-+——+———–+——+———+——+——-+——————+
| Id| User| Host| db| Command| Time| State| Info|
+—-+——+———–+——+———+——+——-+——————+
| 12| p1| localhost| pyt| Query| 0| NULL| show processlist|
+—-+——+———–+——+———+——+——-+——————+
另外,
管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟*.*
mysql> grant super on pyt.* to p1@localhost;
ERROR 1221(HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant super on*.* to p1@localhost;
Query OK, 0 rows affected(0.01 sec)
OK,本文到此结束,希望对大家有所帮助。