多表查询 MySQL管理工具 、 用户授权及撤销

 

复制表源表的key键值不会被复制到新表(原表是teadb.user)

复制表:

mysql> create table db4.t1 select * from teadb.user;

复制表结构:

mysql> create table db4.t2 select * from teadb.user where 1=2;

 

多表查询,也称为连接查询

。将2或2个以上的表,按某个条件连接起来,从中选区需要的数据

。当多个表中存在相同意义的字段(字段名可以不同)时,可以通过改字段连接多个表;

方法:1

扫描二维码关注公众号,回复: 3962264 查看本文章

1.无条件

mysql> select  t4.name,t5.name from t4,t5;

+--------+--------+

| name   | name   |

+--------+--------+

| root   | root   |

| bin    | root   |

| daemon | root   |

| root   | bin    |

| bin    | bin    |

| daemon | bin    |

| root   | daemon |

| bin    | daemon |

| daemon | daemon |

| root   | adm    |

| bin    | adm    |

| daemon | adm    |

| root   | lp     |

| bin    | lp     |

| daemon | lp     |

+--------+--------+

15 rows in set (0.00 sec)

 

方法:2

2.有条件

mysql> select  t4.name,t5.name from t4,t5 where t4.name=t5.name and t4.uid=t5.uid;

+--------+--------+

| name   | name   |

+--------+--------+

| root   | root   |

| bin    | bin    |

| daemon | daemon |

+--------+--------+

 

mysql> select  t4.shell,t5.* from t4,t5 where t4.name=t5.name and t4.uid=t5.uid;

+---------------+--------+------+---------+---------+

| shell         | name   | uid  | comment | homedir |

+---------------+--------+------+---------+---------+

| /bin/bash     | root   |    1 | root    | /root   |

| /sbin/nologin | bin    |    2 | bin     | /bin    |

| /sbin/nologin | daemon |    3 | daemon  | /sbin   |

+---------------+--------+------+---------+---------+

 

where子查询

同一个表 小于平均值的数据

 

mysql> update teadb.user set age=19 where id>=10;   //先导入数据

 

mysql> select name ,age from teadb.user where age < (select avg(age) from teadb.user);

//函数不能直接比大小,需要先出结果

 

mysql> select name from teadb.user where name in (select name from teadb.user);

 

连接查询

两个有重复的和不重复数据的表,查找

方法3:左连接

select 字段名列表 from 表a lift join 表b on 条件表达式;

mysql> select * from t6 left join t7 on t6.uid=t7.uid;

+--------+------+---------------+--------+------+---------------+

| name   | uid  | shell         | name   | uid  | shell         |

+--------+------+---------------+--------+------+---------------+

| root   |    1 | /bin/bash     | root   |    1 | /bin/bash     |

| bin    |    2 | /sbin/nologin | bin    |    2 | /sbin/nologin |

| daemon |    3 | /sbin/nologin | daemon |    3 | /sbin/nologin |

| adm    |    4 | /sbin/nologin | adm    |    4 | /sbin/nologin |

+--------+------+---------------+--------+------+---------------+

//左表是t6,右表是t7,条件成立时以左表为查询结果

 

 

方法4:右连接

select 字段名列表 from 表a right join 表b on 条件表达式;

mysql> select t6.name,t6.uid,t7.name,t7.uid from t6 right join t7 on t7.uid = t6.uid;

+--------+------+--------+------+

| name   | uid  | name   | uid  |

+--------+------+--------+------+

| root   |    1 | root   |    1 |

| bin    |    2 | bin    |    2 |

| daemon |    3 | daemon |    3 |

| adm    |    4 | adm    |    4 |

| NULL   | NULL | lp     |    5 |

| NULL   | NULL | sync   |    6 |

+--------+------+--------+------+

//以t7表为准为右表,把重复的和不重复的都查询出来(没有自动填null)

//以哪个表为准就显示主表的行数

//嵌套查询耗资源,cup需要处理

 

 

程序员用的普通帐号,管理员用管理员帐户

软件装在数据库服务器上,客户端通过网页显示出来

50服务端 和 客户端

[root@client ~]# yum -y install php php-mysql  httpd

[root@client ~]# systemctl restart httpd

[root@client ~]# systemctl enable httpd

 

[root@client ~]# tar -xf /phpMyAdmin-2.11.11-all-languages.tar.gz  -C /var/www/html/

[root@client ~]# cd /var/www/html/

[root@client html]# ls

phpMyAdmin-2.11.11-all-languages    

[root@client html]# mv phpMyAdmin-2.11.11-all-languages/ phpmyadmin    //再改名

[root@client html]# chown -R apache:apache phpmyadmin/

[root@client html]# cd phpmyadmin/

[root@client phpmyadmin]# cp config.sample.inc.php   config.inc.php

[root@client phpmyadmin]# vim config.inc.php

 

  17行  $cfg['blowfish_secret'] = 'han';    //‘’里面一定要加内容

 

  41行  $cfg['Servers'][$i]['host'] = 'localhost';  //‘’写客户端的ip地址

 

本机再访问

[root@client ~]# firefox  192.168.4.50/phpmyadmin

 

用户权限和撤销

linux操作系统管理员才能改mysql密码

[root@client ~]# mysqladmin  -uroot -p password "654321"   //新密码

Enter password:       //输入原来旧密码

 

 

忘记mysql管理员密码,恢复(需要linux操作系统root用户)

vim /etc/my.cnf

[mysqld]

secure_file_priv=/mydir                  //默认文件夹

default-storage_engine=myisam             //默认                                                                                                                                                              

#validate_password_policy=0            //注释

#validate_password_length=6            //注释

skip-grant-tables                      //跳过密码授权     //改过密码后注释掉,恢复上面的两个

 

[root@client ~]# systemctl restart mysqld

[root@client ~]# mysql

 

mysql> select host,user,authentication_string from mysql.user;

+---------------------+----------------------+-------------------------------------------------------------------------------------+

| host      | user      | authentication_string                     |

+---------------------+---------------------+--------------------------------------------------------------------------------------+

| localhost | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |

+---------------------+---------------------+--------------------------------------------------------------------------------------+

 

mysql> update mysql.user set authentication_string=password("123456")where host="localhost" and user="root";

 

mysql> flush privileges;          //刷新配置,使密码生效

 

再修改my.cnf文件(看上注释),重启mysqld

验证

[root@client ~]# mysql -uroot -p123456

 

客户端自己做连接工具,要装包

本机其他用户连接,其他客户端访问服务端都需要服务端授权

 

文件存储位置:授权库(存储在库mysql里面)

授权库mysql,主要的几个表

user:存储授权用户的访问权限                    //用户

db:存储授权用户对表的访问权限                  //库

tables_priv:存储授权用户对表的访问权限           //表

columns_priv:存储授权用户对字段的访问权限       //字段

 

grant配置授权

基本用法:

grant 权限列表  on 库名.表名 to 用户名@'客户端地址' identified by '密码' [whit grant option];

允许改用户为其他用户授权。

mysql> grant all on *.* to mydba@"%" identified by "123456" with grant option;

//新建用户mydba 。对所有库、表有完全权限,允许从任何地址访问,密码设置为“123456”,允许改用户为其他用户授权

 

查看权限(查看表记录方式)

mysql> select * from  mysql.user where user="mydba"\G;

mysql> select host,user from mysql.user;

+-----------+-----------+

| host      | user      |

+-----------+-----------+

| %         | mydba     |

| localhost | mysql.sys |

| localhost | root      |

+-----------+-----------+

 

mysql> show grants for mydba@"%";     //命令的方式查看权限

+---------------------------------------------------------------------------------------------------------------------------+

| Grants for mydba@%                                           |

+---------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |

+---------------------------------------------------------------------------------------------------------------------------+

 

 

验证:[root@room9pc01 ~]# mysql -h192.168.4.50 -umydba -p123456

MySQL [(none)]> select user();           //查询当前登陆的用户名

+-----------------------------------------+

| user()              |

+-----------------------------------------+

| [email protected] |

+-----------------------------------------+

MySQL [(none)]> select @@hostname;          //查看主机名

+-----------------------+

| @@hostname |

+-----------------------+

| client     |

+-----------------------+

MySQL [(none)]> show grants;                   //查看自己权限

+---------------------------------------------------------------------------------------------------------------------------+

| Grants for mydba@%                                           |

+---------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |

+---------------------------------------------------------------------------------------------------------------------------+

MySQL [(none)]> set password=password("123abc");

在客户端给自己修改密码

 

[root@room9pc01 ~]# mysql -h192.168.4.50 -umydba -p123abc

 

数据库管理员修改授权用户的连接密码

mysql> set password for mydba@"%"=password("123456");    //数据库服务端root管理员修改密码

 

 

测试mydba用户授权权限:创建新表 对表记录的增珊改查权限 ,和授权权限(可以创建用户)

 

 

客户端:mydba用户创建,

MySQL [(none)]> grant all on gamedb.* to test1@"localhost" identified by "123465";

//只能在服务端的本机用test1用户登陆,只有gamedb库下的表有权限

 

mysql> show grants for test1@"localhost";            //查看用户的权限策略

+---------------------------------------------------------------------------------------------------------------------+

| Grants for test1@localhost                                |

+---------------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'test1'@'localhost'                 |

| GRANT ALL PRIVILEGES ON `gamedb`.* TO 'test1'@'localhost' |

+---------------------------------------------------------------------------------------------------------------------+

mysql> show databases;

+---------------------------------------+

| Database           |

+---------------------------------------+

| information_schema |       //默认的假库,此用户没有权限看其他的库

+---------------------------------------+

 

 

 

 

撤销mydba的授权权限

root操作

mysql> show grants for mydba@"%";

+---------------------------------------------------------------------------------------------------------------------------+

| Grants for mydba@%                                           |

+---------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |

+---------------------------------------------------------------------------------------------------------------------------+

 

mysql> revoke grant  option on *.* from mydba@"%";      //撤销授权

 

mysql> show grants for mydba@"%";

+---------------------------------------------------------------------------------------+

| Grants for mydba@%                         |

+---------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' |

+---------------------------------------------------------------------------------------+

 

mysql> revoke delete,drop on *.* from mydba@"%";        //撤销对所有库的删除权限

 

mysql> revoke all on *.* from mydba@"%";               //撤销所有权限

 

mysql> show grants for mydba@"%"\G;

*************************** 1. row ***************************

Grants for mydba@%: GRANT USAGE ON *.* TO 'mydba'@'%'

 

mysql> select  * from mysql.db where user="test1"\G;

 

 

mysql> drop user mydba@"%";                            //删除用户

Query OK, 0 rows affected (0.01 sec)

 

mysql> select name,host from mysql.user;

ERROR 1054 (42S22): Unknown column 'name' in 'field list'

mysql> select user,host from mysql.user;

+---------------------+---------------------+

| user      | host      |

+---------------------+---------------------+

| mysql.sys | localhost |

| root      | localhost |

| test1     | localhost |

+---------------------+---------------------+

 

 

案例:  ///授权用户只能创建小于、等于自身用户的权限的帐户,还要保证数据能写入mysql库中

mysql> grant all on db3.* to admin@"%" identified by "123456" with grant option;      //创建用户需要把信息登入mysql.* 中,所以要给mysql库的写权限

mysql> grant insert on mysql.* to admin@"%";   //root允许admin用户可以在mysql库的所有表中写入

再进客户端用普通用户admin登入,方可创建用户

MySQL [db3]> grant all on db3.* to admin2@"%" identified by "123456";

 

 

撤销权限时,库名的表示方式要和授权时一样。

 

 

忘记加授权可以继续加:

mysql> grant all on db3.* to admin@"%" identified my "123456";

mysql> grant all on db3.* to admin@"%" identified by "123456" with grant option;

//加授权

 

 

猜你喜欢

转载自www.cnblogs.com/hanlongyu/p/9919892.html
今日推荐