MySQL的权限有哪些

什么是MySQL权限

1.授权表

mysql数据库中的三个授权表:user、db、host

访问进程授权表是:

1)首先从用户表d中的主机、用户、密码这三个字段开始,判断表中是否存在连接的IP、用户名、密码。
如果存在,则身份验证通过;授权验证和授予授权时,按照useràdbàtables_privàcolumns_priv的顺序分配。
即先检查全局权限表user,如果该用户中对应的权限为Y,则该用户对所有数据库的权限为Y,如果为N,则不再检查db、tables_priv、columns_priv与用户匹配的数据库db表特定,如果db中的权限为N,则在db中获取权限Y,在tables_priv中检查与数据库匹配的特定表,并在表中获取权限Y;,等等。

2.MySQL各种权限(共27个)

(以下操作均通过root登录授予权限,p1@localhost登录执行各种命令进行。

1.usage

连接权限(登录)创建用户时,会自动授予使用权限(.grantedby默认)。

gratusageon*.*to'p1′@'localhost'identifiedby'123′;

此权限为只能用于登录数据库,但不能执行任何操作且使用权限不能回收,即REVOKE用户不能删除用户。

2.select

必须有select权限才能使用selecttable

grantsselectonpyt.*to'p1'@'localhost';

select*fromshop;

3.create

必须有cr只有有eat权限才可以使用createtable

grantcreateonpyt.*to'p1′@'localhost';

4.createroutine

您必须拥有Creatoroutine权限才能使用{create|alter|drop}{procedure|function}

grantcreateroutineonpyt.*to'p1′@'localhost';

当授予creatoroutine时,EXECUTE,A自动授予其创建者LTERROUTINE权限:

showgrantsfor'p1′@'localhost';

+————————————————————————+

Grantsforp1@localhost

+———————————————————————————+

|GRANT*.*TO'p1'@'localhost'通过密码识别'*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′|

|GRANTSELECT、CREATE、CREATEROUTINEON`pyt`.*TO'p1′@'localhost'|

|GRANTEXECUTE,ALTERROUTINEONPROCEDURE`pyt`.`pro_shop1`TO'p1'@'localhost'|

+—————————————————————————————-+

5.createtemporarytables(注意,这是表,不是表)

必须有Createtemporarytables,只有createtemporarytables权限才能使用。

grantcreatetemporarytablesonpyt.*to'p1′@'localhost';

[mysql@mydev~]$mysql-hlocalhost-up1-ppyt

createtemporarytablett1(idint);

6.createview

必须有createview权限才能使用createview

grantcreateviewonpyt.*to'p1′@'localhost';

createviewv_shoppassselectpricefromshop;

7.createuser

使用CREATEUSER,您必须拥有数据库的全局CREATEUSER权限mysql,或者有INSERT权限。

grantcreateuseron*.*to'p1′@'localhost';

grantinserton*。
*top1@localhost;

8.insert

必须有插入权限才能使用insertinto…..values….

9.change

必填只有拥有alter权限才能使用altertable

altertableshopmodifydealerchar(15);

10.alteroutine

您必须拥有alterroutine权限才能使用{alter|drop}{procedure|}函数

granalterroutineonpyt.*to'p1@'localhost';

dropprocedurepro_shop;

QueryOK,0rowsaffected(0.00sec)

revokealterroutineonpyt.*from'p1′@'localhost';

[mysql@mydev~]$mysql-hlocalhost-up1-ppyt

dropprocedurepro_shop;

ERROR1370(42000):alterroutinecommanddeniedtouser'p1′@'localhost'forroutine'pyt.pro_shop'

11.update

必须有更新和权限,可以使用updatetable

updateshopsetprice=3.5wherearticle=0001anddealer='A';

12.delete

必须有删除权限才能使用deletefrom….where….(删除表中的记录)

13.drop

您必须拥有drop权限才能使用dropdatabasedb_name;droptabletab_name;

dropviewvi_name;dropindexin_name;

14.showdatabase

您只能通过showdatabase查看具有特定权限的数据库,除非您具有全局SHOWDATABASES权限。

显示数据库;

+——————–+

|数据库|

+——————–+

|information_schema|

|pyt|

|测试|

+——————–+

15.显示视图

您必须具有showview权限才能执行showcreateview。

grantshowviewonpyt.*top1@localhost;

showcreateviewv_shop;

16.indexx

您必须有索引权限才能执行[create|drop]index

grantindexonpyt.*top1@localhost;

createindexix_shoponshop(article);

dropindexix_shoponshop;

17.excute

执行函数、现有过程

callpro_shop1(0001,@a);

+————+

|文章|

+————+

|0001|

|0001|

+————+

select@a;

+———+

|@a|

+——+

|2|

+——+

18.关键表

必须有lo只有经过cktables的许可才可以使用locktables

grantlocktablesonpyt.*top1@localhost;

locktablesa1read;

unlocktables;

19.reference

有了REFERENCE权限,用户可以使用另一个表的字段作为特定表的外键约束。

20.reload

您必须具有重新加载权限才能执行flush[schedule|log|privilege]

grantreloadonpyt.*top1@localhost;

ERROR1221(HY000):DBGRANT和GLOBALPRIVILEGES的错误使用

grantreloadon*.*to'p1′@'localhost';

QueryOK,0rowsaffected(0.00sec)

QueryOK,0rowsaffected(0.00sec)

flushtables;

21.replicationclient

有了这个权限,可以查询主服务器和仆人的地位。

showmasterstatus;

错误1227(42000):访问被拒绝;您需要超级、复制客户端权限才能执行此操作

grantReplicationclienton*.*top1@localhost;

grantsuperon*.*top1@localhost;

showmasterstatus;

+——————+————-+————–+——————+

|文件|位置|Binlog_Do_DB|Binlog_Ignore_DB|

+——————+——————-+——————+——————+

|mysql-bin.000006|2111|||

+—————+————-+————–+—————+

showslavestatus;

22.replicationslave

有此权限查看从服务器,从主服务器读取二进制日志。

显示从主机;

ERROR1227(42000):访问被拒绝;您需要REPLICATIONSLAVE权限才能执行此操作

showbinlogevents;

ERROR1227(42000):访问被拒绝;您需要REPLICATIONSLAVE权限rthis操作

grantreplicationslaveon*.*top1@localhost;

showslavehosts;

清空(0.00秒)

showbinlogevents;

+——————+——-+——————-+————–+————-+————–+

|Log_name|Pos|事件类型|Server_id|End_log_pos|信息|+——————+——-+————–+—————+————-+——————+

|mysql-bin.000005|4|Format_desc|1|98|服务器:5.0.77-log,Binlogver:4||mysql-bin.000005|98|查询|1|197|使用`mysql`;createtablea1(iint)引擎=myisam|

…………………………………………………………………………

23.关闭

关闭MySQL:

[mysql@mydev~]$mysqladminshutd拥有

恢复:

p>

[mysql@mydev~]$mysql

ERROR2002(HY000):无法通过socket'/tmp/mysql.sock'连接到本地MySQL服务器(2)

[mysql@mydev~]$cd/u01/mysql/bin

[mysql@mydevbin]$./mysqld_safe&

[mysql@mydevbin]$mysql

24.grantoption

与grantoption,你可以将自己的权限授予其他用户(仅限于你已有的权限)

grantGrantoptiononpyt.*top1@localhost;

grantsselectonpyt.*top2@localhost;

25.file

你可以仅当您有权限file..intooutfile和loaddatainfile...操作时才执行select,但是不要向管理员以外的帐户授予文件、进程和超级权限。
这可能会导致严重的安全风险。

grantfileon*.*top1@localhost;

loaddatainfile'/home/mysql/pet.txt'intotablepet;

26.super

此权限允许用户终止任何修改全局变量SET语句的查询;使用CHANGEMASTER、PURGEMASTERLOGS。

grantsuperon*.*top1@localhost;

purgemasterlogsbefore'mysql-bin.000006';

27.process

拥有此权限,用户可以执行SHOWPROCESSLIST和KILL命令。
默认情况下,每个用户都可以执行SHOWPROCESSLIST命令,但只能查询该用户的进程。

showprocesslist;

+——-+——+————+——+————+——+——-+——————+

|Id|用户|主机|db|方向|时间|状态|信息|

+——-+——+————–+——+————+——+——-+——————+

|12|p1|localhost|pyt|查询|0|NULL|showprocesslist|

+——-+——+————–+——+————+——+——-+——————+

另外,

管理权限(如super、process、file等)不能指定数据库,on后面必须跟*.*

grantsuperonpyt.*top1@localhost;

ERROR1221(HY000):DBGRANT和GLOBALPRIVILEGES的使用不正确

grantsuperon*.*top1@localhost;

QueryOK,0rowsaffected(0.01sec)

Ubuntu中给mysql添加新用户并分配权限

在Ubuntu操作系统下,通过执行以下命令启动MySQL服务:/etc/init.d/sudomysqld为了添加新的MySQL用户并分配权限,可以按照以下步骤操作:使用以下命令登录MySQL命令:mysql-uroot之后,执行以下命令为新用户分配权限:授予权限1、权限2、权限非数据库名。
表名到‘连接密码’标识的用户名@用户地址;其中,权限1、权限2、权限n代表select、insert、update、delete、create、drop等14种预定义权限,用于指定用户对特定数据的访问权限。
如果权限1、权限2、权限n设置为allprivileges或all,则表示给该用户所有权限。
如果数据库名.表名是*.*,则表示该用户被赋予了服务器上所有数据库的所有表的权限。
用户地址可以设置为localhost、IP地址、机器名、域名,或者使用'%'表示从任何地址连接。
“连接密码”不能为空,否则创建失败。
下面是权限分配的具体示例:grantselect,insert,update,delete,create,droponvtdc.employeetojoe@10.163.225.87identifiedby'123';这意味着给来自10.163.225.87的用户joe分配了select、insert、对vtdc数据库中employee表有update、delete、create、drop操作权限,密码设置为123.grantallprivilegesonvtdc.*tojoe@10.163.225.87identifiedby'123';这意味着来自10.163.225.87的用户joe已经被分配了对vtdc数据库中所有表的所有操作权限,密码设置为123。
grantallprivilegeson*.*tojoe@10.163.225.87identifiedby'123';这意味着来自10.163.225.87的用户joe被分配了对所有数据库中所有表的所有操作权限,并设置密码为123。
grantallprivilegeson*.*tojoe@localhostidentifiedby'123';这意味着本地用户joe被赋予了对所有数据库中所有表的所有操作权限,密码设置为123。