彩票网站开发亿云,购物网站asp源码,wordpress 单页模板,qq官网登录入口电脑版【Mysql】用户授权#xff08;GRANT#xff09;语法介绍和示例 【一】Mysql用户授权#xff08;GRANT#xff09;语法【1】授予用户权限语法【2】GRANT语句中的权限类型的使用说明如下#xff1a;#xff08;1#xff09;授予数据库权限时#xff0c;权限类… 【Mysql】用户授权GRANT语法介绍和示例 【一】Mysql用户授权GRANT语法【1】授予用户权限语法【2】GRANT语句中的权限类型的使用说明如下1授予数据库权限时权限类型可以指定为以下值2授予表权限时权限类型可以指定为以下值3授予列权限时权限类型的值只能指定为 SELECT、INSERT 和 UPDATE同时权限后面需要加上列名列表 column-list。4最有效率的权限是用户权限。 【3】WITH GRANT OPTION的作用【4】使用 SELECT 语句查询所有用户的权限如下所示。 【二】mysql授权GRANT ALL PRIVILEGES三种示例1改表法2授权法3另外一种方法4其他 【三】MySQL增删改查报INSERT、DROP、UPDATE、SELECT、CREATEcommand denied to user xxlocalhost for table test【1】查看用户权限【2】创建mysql用户【3】用户权限授权 【一】Mysql用户授权GRANT语法
当成功创建用户账户后还不能执行任何操作需要为该用户分配适当的访问权限。可以使用 SHOW GRANT FOR 语句来查询用户的权限。 注意新创建的用户只有登录 MySQL 服务器的权限没有任何其他权限不能进行其他操作。 USAGE ON*.* 表示该用户对任何数据库和任何表都没有权限。
【1】授予用户权限语法
对于新建的 MySQL 用户必须给它授权可以用 GRANT 语句来实现对新建用户的授权。 语法格式
GRANT
权限类型 [ ( 列名 ) ] [ , 权限类型 [ ( 列名 ) ] ]
ON 对象 权限级别 TO 用户
其中用户的格式
用户名 [ IDENTIFIED ] BY [ PASSWORD ] 口令
[ WITH GRANT OPTION]
| MAX_QUERIES_PER_HOUR 次数
| MAX_UPDATES_PER_HOUR 次数
| MAX_CONNECTIONS_PER_HOUR 次数
| MAX_USER_CONNECTIONS 次数语法说明如下 1列名 可选项。用于指定权限要授予给表中哪些具体的列。
2 ON 子句 用于指定权限授予的对象和级别如在 ON 关键字后面给出要授予权限的数据库名或表名等。
3权限级别 用于指定权限的级别。可以授予的权限有如下几组 1-列权限和表中的一个具体列相关。例如可以使用 UPDATE 语句更新表 students 中 student_name 列的值的权限。 2-表权限和一个具体表中的所有数据相关。例如可以使用 SELECT 语句查询表 students 的所有数据的权限。 3-数据库权限和一个具体的数据库中的所有表相关。例如可以在已有的数据库 mytest 中创建新表的权限。 4-用户权限和 MySQL 中所有的数据库相关。例如可以删除已有的数据库或者创建一个新的数据库的权限。
对应地在 GRANT 语句中可用于指定权限级别的值有以下几类格式 1-表示当前数据库中的所有表。 2-.表示所有数据库中的所有表。 3-db_name.表示某个数据库中的所有表db_name 指定数据库名。 4-db_name.tbl_name表示某个数据库中的某个表或视图db_name 指定数据库名tbl_name 指定表名或视图名。 5-tbl_name表示某个表或视图tbl_name 指定表名或视图名。 6-db_name.routine_name表示某个数据库中的某个存储过程或函数routine_name 指定存储过程名或函数名。 7-TO 子句用来设定用户口令以及指定被赋予权限的用户 user。若在 TO 子句中给系统中存在的用户指定口令则新密码会将原密码覆盖如果权限被授予给一个不存在的用户MySQL 会自动执行一条 CREATE USER 语句来创建这个用户但同时必须为该用户指定口令。
【2】GRANT语句中的权限类型的使用说明如下
1授予数据库权限时权限类型可以指定为以下值
SELECT表示授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限。 INSERT表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。 DELETE表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。 UPDATE表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。 REFERENCES表示授予用户可以创建指向特定的数据库中的表外键的权限。 CREATE表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。 ALTER表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。 SHOW VIEW表示授予用户可以查看特定数据库中已有视图的视图定义的权限。 CREATE ROUTINE表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。 ALTER ROUTINE表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。 INDEX表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。 DROP表示授予用户可以删除特定数据库中所有表和视图的权限。 CREATE TEMPORARY TABLES表示授予用户可以在特定数据库中创建临时表的权限。 CREATE VIEW表示授予用户可以在特定数据库中创建新的视图的权限。 EXECUTE ROUTINE表示授予用户可以调用特定数据库的存储过程和存储函数的权限。 LOCK TABLES表示授予用户可以锁定特定数据库的已有数据表的权限。 ALL 或 ALL PRIVILEGES表示以上所有权限。
2授予表权限时权限类型可以指定为以下值
SELECT授予用户可以使用 SELECT 语句进行访问特定表的权限。 INSERT授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限。 DELETE授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限。 DROP授予用户可以删除数据表的权限。 UPDATE授予用户可以使用 UPDATE 语句更新特定数据表的权限。 ALTER授予用户可以使用 ALTER TABLE 语句修改数据表的权限。 REFERENCES授予用户可以创建一个外键来参照特定数据表的权限。 CREATE授予用户可以使用特定的名字创建一个数据表的权限。 INDEX授予用户可以在表上定义索引的权限。 ALL 或 ALL PRIVILEGES所有的权限名。
3授予列权限时权限类型的值只能指定为 SELECT、INSERT 和 UPDATE同时权限后面需要加上列名列表 column-list。
4最有效率的权限是用户权限。
授予用户权限时权限类型除了可以指定为授予数据库权限时的所有值之外还可以是下面这些值 1-CREATE USER表示授予用户可以创建和删除新用户的权限。 2-SHOW DATABASES表示授予用户可以使用 SHOW DATABASES 语句查看所有已有的数据库的定义的权限。
【实例】使用 GRANT 语句创建一个新的用户 testUser密码为 testPwd。用户 testUser 对所有的数据有查询、插入权限并授予 GRANT 权限。输入的 SQL 语句和执行过程如下所示。
mysql GRANT SELECT,INSERT ON *.*- TO testUserlocalhost- IDENTIFIED BY testPwd- WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.05 sec)使用 SELECT 语句查询用户 testUser 的权限如下所示。
mysql SELECT Host,User,Select_priv,Grant_priv- FROM mysql.user- WHERE UsertestUser;
----------------------------------------------
| Host | User | Select_priv | Grant_priv |
----------------------------------------------
| localhost | testUser | Y | Y |
----------------------------------------------
1 row in set (0.01 sec)【3】WITH GRANT OPTION的作用
数据库添加用户语句
grant all privileges on testdb.* to ‘test_user’’localhost’ identified by “jack” with grant option;
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
如果不想这个用户有这个grant的权限可以不加这句
【4】使用 SELECT 语句查询所有用户的权限如下所示。
MySQL [mysql] SELECT Host,Db,User,Select_priv,Grant_priv FROM mysql.db ;
--------------------------------------------------------------------------
| Host | Db | User | Select_priv | Grant_priv |
--------------------------------------------------------------------------
| localhost | performance_schema | mysql.session | Y | N |
| localhost | sys | mysql.sys | N | N |
| % | cloud_manager_v2 | feeduser | Y | N |
| % | xiaojin_airflow | rw_airflow | Y | N |
| 10.20.250.12 | xiaojin_airflow | rw_airflow | Y | N |
| 10.20.250.13 | xiaojin_airflow | rw_airflow | Y | N |
| 10.20.250.12 | data_center | rw_airflow | Y | N |
| 10.20.250.13 | data_center | rw_airflow | Y | N |
--------------------------------------------------------------------------
8 rows in set (0.00 sec)MySQL [mysql] SELECT Host,User,Select_priv,Grant_priv FROM mysql.user ;
------------------------------------------------------
| Host | User | Select_priv | Grant_priv |
------------------------------------------------------
| localhost | root | Y | Y |
| localhost | mysql.session | N | N |
| localhost | mysql.sys | N | N |
| % | root | Y | Y |
| % | feeduser | N | N |
| % | rw_airflow | N | N |
| 10.20.250.12 | rw_airflow | N | N |
| 10.20.250.13 | rw_airflow | N | N |
------------------------------------------------------
8 rows in set (0.00 sec)【二】mysql授权GRANT ALL PRIVILEGES三种示例
1改表法
可能是你的帐号不允许从远程登陆只能在localhost。这个时候只要在localhost的那台电脑登入mysql后更改 “mysql” 数据库里的 “user” 表里的 “host” 项从localhost改成%
mysql -u root -p vmware
mysqluse mysql;
mysqlupdate user set host % where user root;
mysqlselect host, user from user; 2授权法
例如你想myuser使用mypassword从任何主机连接到mysql服务器的话。
1-如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO myuser192.168.1.3 IDENTIFIED BY mypassword WITH GRANT OPTION;
FLUSH PRIVILEGES; 2-如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库并使用mypassword作为密码
GRANT ALL PRIVILEGES ON dk.* TO myuser192.168.1.3 IDENTIFIED BY mypassword WITH GRANT OPTION;
FLUSH PRIVILEGES; 注意授权后必须FLUSH PRIVILEGES;否则无法立即生效。
3另外一种方法
在安装mysql的机器上运行
1、d:\mysql\bin\mysql -h localhost -u root
//这样应该可以进入MySQL服务器
2、mysqlGRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION
//赋予任何主机访问数据的权限
3、mysqlFLUSH PRIVILEGES
//修改生效
4、mysqlEXIT
//退出MySQL服务器 这样就可以在其它任何的主机上以root身份登录啦
4其他
mysql grant all privileges on *.* to energy_pf192.168.2.65 identified by energy_pf with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql plush privileges;允许用户energy_pf从ip为192.168.2.65的主机连接到mysql服务器的任意数据库.并使用energy_pf作为密码
【三】MySQL增删改查报INSERT、DROP、UPDATE、SELECT、CREATEcommand denied to user ‘xx’‘localhost’ for table ‘test’
【1】查看用户权限
show grants; 结果
-------------------------------------------------------------
| Grants for root% |
-------------------------------------------------------------
| GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION |
-------------------------------------------------------------
1 row in set (0.01 sec)
————————————————
【2】创建mysql用户
mysql CREATE USER usernamehost IDENTIFIED BY password;命令说明 1username新建的用户名用于链接数据库的登录名 2host指定该用户在哪个主机上可以登陆如果是本地用户可用localhost如果想让该用户可以从任意远程主机登陆可以使用通配符% 3password该用户的登陆密码密码可以为空如果为空则该用户可以不需要密码登陆服务器
列举一些常见的创建例子
mysql CREATE USER mumulocalhost IDENTIFIED BY 123456; # 只能本地登录
mysql CREATE USER thomas192.168.1.73 IDENDIFIED BY 123456;# 仅限192.168.1.73登录
mysql CREATE USER lin% IDENTIFIED BY 123456; # 任意远程主机需要密码
mysql CREATE USER huea% IDENTIFIED BY ;# 任意远程主机无需密码
mysql CREATE USER thomas%;# 任意远程主机无需密码
以上就完成了用户的创建用户也能成功连接上但是一旦对数据库增删改查操作均会报错
INSERT、DROP、UPDATE、SELECT、CREATE, ALTER等command denied to user xxxlocalhost for table table
出现这个问题原因在于该用户没有这些权限解决方式就是需要给用户授权增删改查的权限。
【3】用户权限授权
mysql GRANT privileges ON databasename.tablename TO usernamehost
命令说明 privileges: 要赋予用户的权限如INSERT、DROP、UPDATE、SELECT、CREATE, ALTER等 databasename: 数据库如果要授予该用户对所有数据库和表的相应操作权限则可用表示如.* tablename: 数据表如果要授予该用户对所有数据库和表的相应操作权限则可用表示如.* username: 用户名用于链接数据库的登录名 host: 指定该用户在哪个主机上可以登陆如果是本地用户可用localhost如果想让该用户可以从任意远程主机登陆可以使用通配符%
列举一些常见的创建例子
mysql GRANT SELECT, INSERT ON test.user TO thomas%; # 给thomas分配test库的user表查询、插入权限
mysql GRANT ALL ON *.* TO thomas%; # 给thomas分配所有库所有表的所有权限
mysql GRANT ALL ON test.* TO thomas%; # 给thomas分配test库的所有表的所有权限
注意:以上面这种授权方式给用户授权权限该用户没有权限创建新用户更没权限授权用户的权限
1创建用户
mysql CREATE USER lin% IDENTIFIED BY 123456;
1227 - Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
2用户授权
mysql GRANT INSERT ON comment.* TO lin%;
1044 - Access denied for user lin% to database comment
如果想让创建的用户经过授权也可以创建并授权的权限那么需要用以下命令
mysql GRANT privileges ON databasename.tablename TO usernamehost WITH GRANT OPTION;
也就是在常规授权的命令后加上’WITH GRANT OPTION’即可,如果想让执行后的命令立即生效可以在执行语句后执行以下命令
mysql FLUSH PRIVILEGES;FLUSH PRIVILEGES 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后希望在不重启MySQL服务的情况下直接生效那么就需要执行这个命令。通常是在修改ROOT帐号的设置后怕重启后无法再登录进来那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险!!
设置与更改用户密码
SET PASSWORD FOR usernamehost 123456;
ALTER USER rootlocalhost IDENTIFIED BY 123456;如果是当前登陆用户用
SET PASSWORD 123456;撤销用户权限 REVOKE跟GRANT的语法差不多只需要把关键字 “to” 换成 “from” 即可
REVOKE privilege ON databasename.tablename FROM linhost;删除用户
DROP USER linhost;