您的当前位置:首页正文

玩转mysql授权

2023-11-10 来源:帮我找美食网

0. 删除系统多余账号 use mysql; select user,host from mysql.user; delete from user where user=‘‘; flush privileges; mysql创建账号: mysqladmin -u root password ‘123456‘以demo库test库分别demo_1和test_1表为例:  create database demo; 

  create table demo_1(id int);  insert into demo_1(id) values(1),(2),(3); 

  create database test;  create table test_1(id int);  insert into test_1(id) values(1),(2),(3); 

   create table test_2(id int);   insert into test_2(id) values(1),(2),(3);1. 授权所有库   创建新用户并授权,且密码为空: grant all on *.* to test@‘localhost‘

   创建新用户并授权,且设密码: grant all on *.* to test@‘localhost‘ identified by ‘123456‘;                   或  grant select, insert, update, delete on *.* to test@‘localhost‘

   刷新权限: flush privileges;

   查看权限: show grants for test@‘localhost‘;               GRANT ALL PRIVILEGES ON *.* TO ‘test‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ 

   测试权限(可以): mysql -utest -p123456 -e ‘select * from demo.demo_1‘;  

 1.1 收回权限     收回权限: revoke all on *.* from test@‘localhost‘;

     刷新权限: flush privileges;

     查看权限: show grants for test@‘localhost‘;                GRANT USAGE ON *.* TO ‘test‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘

     测试权限(不可以): mysql -utest -p123456 -e ‘select * from demo.demo_1‘;            ERROR 1142 (42000) at line 1: SELECT command denied to user ‘test‘@‘localhost‘ for table ‘demo_1‘     2. 授权指定库(1个或多个库)     grant all on test.* to test@‘localhost‘;     grant all on demo.* to test@‘localhost‘;        注意:不能一次对指定的多个库进行授权,只能一个一个授权:grant all on test.*,demo.* to test@‘localhost‘;

    查看权限: show grants for test@‘localhost‘;            GRANT USAGE ON *.* TO ‘test‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘

            GRANT ALL PRIVILEGES ON `test`.* TO ‘test‘@‘localhost‘            GRANT ALL PRIVILEGES ON `demo`.* TO ‘test‘@‘localhost‘

     测试权限(可以): mysql -utest -p123456 -e ‘select * from demo.demo_1‘; 

 2.1 收回权限        revoke all on test.* from test@‘localhost‘;        revoke all on demo.* from test@‘localhost‘;        flush privileges;      测试权限:mysql -utest -p123456 -e ‘select * from demo.demo_1‘;                ERROR 1142 (42000) at line 1: SELECT command denied to user ‘test‘@‘localhost‘ for table ‘demo_1‘3. 授权指定库(1张或多张表)      授权: grant all on test.test_2 to test@‘localhost‘;      刷新权限: flush privileges;      查看权限: show grants for test@‘localhost‘;               GRANT USAGE ON *.* TO ‘test‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘               GRANT ALL PRIVILEGES ON `test`.`test_2` TO ‘test‘@‘localhost‘      测试权限: mysql -utest -p123456 -e ‘select * from test.test_1‘;                   ERROR 1142 (42000) at line 1: SELECT command denied to user ‘test‘@‘localhost‘ for table ‘test_1‘              mysql -utest -p123456 -e ‘select * from test.test_2‘; 查询有东西      注意:授权一个不存在的表居然也可以成功,还可以查看出权限。 3.1 收回权限         revoke all on test.test_2 from test@‘localhost‘;         flush privileges;         4. 隐藏库不让授权   information_schema  该库存储了mysql一些元数据,如数据库名或表名,列的数据类型,或访问权限等   mysql5. 将ip整成域名访问数据库   192.168.11.17 www.db.com    navcat中就可以直接填写域名,指定端口,需要注意host是控制访问的权限 %/192.168.11.%/192.168.11.18/等等

本文出自 “开发与运维” 博客,谢绝转载!

玩转mysql授权

标签:玩转mysql授权

小编还为您整理了以下内容,可能对您也有帮助:

如何给MySql创建连接用户并授权

一般在为MySql创建用户时建议使用GRANT前台命令,当然如果对我们开发者而言,方法还有很多种,比如使用INSERT命令,甚至是直接修改mysql user数据表,但仍然建议按照MySQL规范去授权账户。因为它太容易忘记,特别整理方便参考。1、登录MySQL

输入mysql -u root和密码即可登录到Mysql。

2、选择数据库

语句如下:use mysql;

3、在mysql的user表中增加连接用户

GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

其中:

“username”替换为将要授权的用户名,比如clientusr;

“password”替换为clientusr设置的密码;

4、可访问数据表授权

创建好帐户之后,就开始给上面的common user进行数据表授权,步骤3中增加的连接用户默认权限都是“N”的,必须在db表中为该帐户授权,允许其访问专用数据库,当然超级用户就不说了。

使用下面语句:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON dbx.* TO 'username'@'localhost' IDENTIFIED BY 'password';

本语句中的权限根据实际需要确定:

"dbx"替换为授权访问的数据库名,如果只给某张表授权:dbx.tablename

"username"是步骤2授权用户名

"password"是步骤2授权用户的设置密码

这样就为该用户授予了对某数据表的SELECT, INSERT, UPDATE, DELETE, CAREATE, DROP权限。

5、生效授权,创建完毕

FLUSH PRIVILEGES;

备注:

1、不要直接使用INSERT语句添加user记录,使用INSERT可能出现:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value错误。不过早期的MYSQL版本笔者倒没出现这个错误,因为天缘一直都是直接修改user表或直接使用INSERT语句完成,后来升级MYSQL到5.1的时候,发现可能会出现这个错误。

2、上文3和4,也可使用一句话GRANT ALL ON tbx.* TO 'username' IDENTIFIED BY 'password',这句话会自动创建username并为之授权。更多授权权限可参考MYSQL官方网站。

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命令行能否实现新建用户呢?答案无疑是肯定的。而且在使用使用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用户的权限

1、创建新用户

通过root用户登录之后创建

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  创建新用户,用户名为testuser,密码为123456 ;

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,可以在本地访问mysql

>> grant all privileges on *.* to testuser@"%" identified by "123456" ;   //  设置用户testuser,可以在远程访问mysql

>> flush privileges ;  //  mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效

2、设置用户访问数据库权限

>> grant all privileges on test_db.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,只能访问数据库test_db,其他数据库均不能访问 ;

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,可以访问mysql上的所有数据库 ;

>> grant all privileges on test_db.user_infor to testuser@localhost identified by "123456" ;  //  设置用户testuser,只能访问数据库test_db的表user_infor,数据库中的其他表均不能访问 ;

3、设置用户操作权限

>> grant all privileges on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION ;  //设置用户testuser,拥有所有的操作权限,也就是管理员 ;

>> grant select on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION ;  //设置用户testuser,只拥有【查询】操作权限 ;

>> grant select,insert on *.* to testuser@localhost identified by "123456" ;  //设置用户testuser,只拥有【查询\插入】操作权限 ;

>> grant select,insert,update,delete on *.* to testuser@localhost identified by "123456" ;  //设置用户testuser,只拥有【查询\插入】操作权限 ;

>> REVOKE select,insert ON what FROM testuser  //取消用户testuser的【查询\插入】操作权限 ;

如何开启MySQL远程访问权限 允许远程连接

1、改表法。

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

mysql -u root -pvmwaremysql>use mysql;

mysql>update user set host = '%' where user = 'root';

mysql>select host, user from user;

2、授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI

TH GRANT OPTION;

如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY

'mypassword' WITH GRANT OPTION;

我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH RIVILEGES

使修改生效,就可以了

另外一种方法:

在安装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

//修改生效

4、mysql>EXIT

//退出MySQL服务器

这样就可以在其它任何的主机上以root身份登录啦。

Top