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

1.1 复制表

   作用1 : 备份表

    作用2 :   快速建表

        命令格式: create table  库名.表名   sql查询命令

        mysql>  create table udb4.userbak select * from db3.user;
        mysql>    select * from   userbak;
       mysql> create  table db4.user2 select * from db3.user where uid <= 10;
       mysql>   select * from  user2;                                 

mysql>   create table db4.user3 select * from db3.user where 1=2;   #  将db3.user的表结构赋与db4.user3,,,,,,,where 1=2  指的是事件是假的;
mysql> desc db3.user;     #db3.user的表结构和db4.user3的表结构一样,但是db3.user的表结构的键值不会赋与db4.user3,需要自己额外添加键值,

1.2 多表查询:

    格式1:多表查询

             select 字段名列表  from 表名列表;    笛卡尔集: 表记录相乘的积是查询结果;

               select   字段名列表   from 表名列表  where  条件;

mysql> create table db4.t1 select name,uid,shell,password from db3.user limit 3;  # 通过复制表格的方法创建db4.t1 表格
mysql>   create table db4.t2 select name,uid,homedir from  db3.user limit 5;   # 通过复制表格的方法创建db4.t2 表格
mysql>   select * from  t1,t2  where t1.name="root" t2.name="root";  # 从t1,t2表中查询t1.name="root" t2.name="root"  所有列
mysql> select t1.name,t1.uid,t2.homedir from  t1,t2 where t1.name="root" and t2.name="root"; # 字段名列表:                 name,t1.uid,t2.homedir   这些列   ,表明列表:t1,t2
mysql> select * from   t1,t2 where t1.uid=t2.uid;    # 

+--------+------+---------------+----------+--------+------+---------+
| name   | uid  | shell         | password | name   | uid  | homedir |
+--------+------+---------------+----------+--------+------+---------+
| root   |    2 | /bin/bash     | x        | root   |    2 | /root   |
| bin    |    2 | /sbin/nologin | f        | root   |    2 | /root   |
| root   |    2 | /bin/bash     | x        | bin    |    2 | /bin    |
| bin    |    2 | /sbin/nologin | f        | bin    |    2 | /bin    |
| daemon |    3 | /sbin/nologin | f        | daemon |    3 | /sbin   |
+--------+------+---------------+----------+--------+------+---------+
 

   格式2: where 嵌套查询(子查询):把内层查询结果作为外层查询的查询条件;

              where 条件 (select  字段名列表  from  表名  where 条件 );

mysql> select name,uid from  db3.user where uid < (select avg(uid) from db3.user);  #db3.user表里输出uid值小于uid字段平均值                                                                                                                                  的用户名和uid;

 mysql> select name from db4.t1

mysql>   select name from   db3.user where name in (select name from db4.t1);    # 

mysql> create table db4.t3 select name,uid,shell from db3.user limit 5;
 

 两个表里面存储的数据信息相同,但是有重复的: (比较两个表里面相同的数据)

格式3: 左连接查询 (以左边的表为主显示查询结果)

             select 字段名列表  from 表名  lest  join 表名  on 条件;

格式4 : 右连接查询(以右边的表为主显示查询结果)

              select 字段名列表  from 表名  right join 表名  on 条件;

mysql> create table db4.t3 select name,uid,shell from db3.user limit 5;
mysql> create table db4.t4 select name,uid,shell from db3.user limit 9;
mysql> select * from db4.t3 left join db4.t4 on t3.uid = t4.uid;

| name   | uid  | shell         | name   | uid  | shell         |
+--------+------+---------------+--------+------+---------------+
| root   |    2 | /bin/bash     | root   |    2 | /bin/bash     |
| bin    |    2 | /sbin/nologin | root   |    2 | /bin/bash     |
| root   |    2 | /bin/bash     | bin    |    2 | /sbin/nologin |
| bin    |    2 | /sbin/nologin | bin    |    2 | /sbin/nologin |
| daemon |    3 | /sbin/nologin | daemon |    3 | /sbin/nologin |
| adm    |    4 | /sbin/nologin | adm    |    4 | /sbin/nologin |
| lp     |    5 | /sbin/nologin | lp     |    5 | /sbin/nologin |
+--------+------+---------------+--------+------+---------------+

mysql> select * from db4.t3 right join db4.t4 on t3.uid = t4.uid;

+--------+------+---------------+----------+------+----------------+
| name   | uid  | shell         | name     | uid  | shell          |
+--------+------+---------------+----------+------+----------------+
| root   |    2 | /bin/bash     | root     |    2 | /bin/bash      |
| root   |    2 | /bin/bash     | bin      |    2 | /sbin/nologin  |
| bin    |    2 | /sbin/nologin | root     |    2 | /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  |
| lp     |    5 | /sbin/nologin | lp       |    5 | /sbin/nologin  |
| NULL   | NULL | NULL          | sync     |    6 | /bin/sync      |
| NULL   | NULL | NULL          | shutdown |    7 | /sbin/shutdown |
| NULL   | NULL | NULL          | halt     |    8 | /sbin/halt     |
| NULL   | NULL | NULL          | mail     |    9 | /sbin/nologin  |
+--------+------+---------------+----------+------+----------------+
 

二,mysql 管理工具 (访问mysql数据库服务的方式)

命令行

安装图形软件

web页面

1部署运行环境

[root@host50 ~]# yum  -y install httpd php php-mysql.x86_64 
[root@host50 ~]# systemctl start  httpd.service

[root@host50 ~]# systemctl enable  httpd.service 

2.安装软件 :(在官网下载软件包)

cd /root

[root@host50 ~]#  tar  -zxvf phpMyAdmin-2.11.11-all-languages.tar.gz 
[root@host50 ~]#  mv phpMyAdmin-2.11.11-all-languages /var/www/html/admin  # 移动目录并且重命名
 

3.修改软件配置文件

[root@host50 ~]# cd  /var/www/html/admin/

[root@host50 ~]#  cp config.sample.inc.php  config.inc.php   #将配置文件进行复制

[root@host50 admin]#  vim  config.inc.php    #  修改配置文件

    $cfg['blowfish_secret'] = '123';       # 填写密码

    $cfg['Servers'][$i]['host'] = 'localhost';     # 如果phpMyAdmin-2.11.11-all-languages.tar.gz是安装在另外一个服务机器里面,

则这边应该在 $cfg['Servers'][$i]['host'] =后面应该填写数据库服务器的地址,在该实验中由于软件包是安装在数据库这个服务器里面,所以直接填写localhost

4.在客户端访问软件

http://192.168.4.50/admin

5.使用数据库管理登陆

   用户 root

   密码 123456

相当于 mysql -uroot -p123456

四。用户授权及撤销

   4.1   恢复root 密码

           1.)停止 Mysql的服务程序:[root@host50 ]# systemctl stop mysqld.service      

            2) 跳过授权表启动mysql 服务,配置主配置文件:

                          [root@host50 admin]#   vim   /etc/my.cnf

                             [mysql]                  # 在 [mysql]下面添加skip-grant-tables

                             skip-grant-tables               # 添加这条

                            #validate_password_length=6              # 需要把密码策略注释掉
                           #validate_password_policy =0
                        
               3) 重设root密码:   

                     [root@host50 ]# mysql
                        mysq  l> desc mysql.user;     查看user表结构

                                                            其中  user: 登陆的用户名      host : 客户端地址   authentication_string 表示加密处理

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

                 +-----------+-----------+-------------------------------------------+
| user      | host      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| root      | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
      mysql> update mysql.user         # 更新表格
    -> set authentication_string=password("123456")   #  重新设置登陆密码
    -> where
    -> user="root" and host="localhost";           # 查询条件

mysql> flush privileges;                #刷新
 [root@host50 admin]# vim /etc/my.cnf                 # 重新配置文件
        [mysqld]
validate_password_length=6        // 将密码策略注释去掉
validate_password_policy =0         //将密码策略注释去掉
 #skip-grant-tables                   //将这条注释掉
  [root@host50 admin]#  systemctl  restart mysqld             #重新重起mysqld
[root@host50 admin]#  mysql -uroot -p123456                   # 用自己重新设置的密码登陆mysql
               

    在shell命令行修改root登陆密码

  [root@host50 admin]# mysqladmin -hlocalhost -p password "abc123";    #  password表示密文传输

 Enter password:                     # 此时输入的之前用root用户登陆数据库的密码

[root@host50 admin]# mysql -uroot -p123456    # 使用修改后的密码登陆数据库
host50  是数据库的操作系统

4.2 用户授权:  在数据库服务器上添加新的连接用户名并设置访问权限

           ——授权命令

格式: mysql>  grant    权限列表  on  库名.表名  to  用户名@“客户端地址”   identified by "密码"  with grant option;  #

          #(加上with grant option  表示新添加的用户的权限 拥有 grant 权限:指的是能添加其他的用户权限)   

      注意事项:

                ---当 库名.表名  为  *.*  时 ,匹配所有库和所有表

           权限列表 :

                    all: 匹配所有权限

                      select,update,insert 

                      select   ,  update(字段1,,,,)

                       usage       无权限         

          %:匹配所有的主机

          192.168.1.%   :匹配指定的一个网段

          192.168.1.1     :匹配指定的ip地址

例子:

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

mysql> grant all on db3.* to admin@"localhost" identified by "plj123";
mysql> grant select,update(name) on db3.user to yaya@"192.168.4.51" identified by "123456";

mysql> grant  select on *.* to mydba2@"%" identified by "123456";

查看mysql数据库表格 :mysql.user,mysql.db,mysql.columns_priv

mysql> select use,host from mysql.user;   #  查看拥有新添加的用户

mysql> select *  from mysql.user\G;

mysql> select user,host from mysql.db;
mysql> select user,host from mysql.tables;

mysql> select user,host from mysql.columns_priv;
 

[root@host50 admin]#  mysql -uadmin -pplj123    #  在主机里面用uadmin用户登陆

mysql> show databases;   # 只是显示db3的库

mysql>use db3;

mysql>show tables;     # 只是显示db3库的所有表格;

mysql> show grants;    #查看当前用户拥有的权限

[root@host51 ~]# mysql -h192.168.4.50 -uyaya -p123456;     #  在主机host51用yaya 用户登陆192.168.4.50的数据库
mysql> select user();    # 查看当前登陆的用户
   测试权限,执行管理库的命令,管理表的命令  记录管理命令

mysql> show databases;   #  只是显示db3库

mysql>use db3;

mysql>show tables;     # 只是显示user表格
mysql> update user set name="haha" where name="root";   # 可以修改成功
mysql> insert into user(name) values("sss");  #不能修改,权限不足

  mysql> update user set password="haha" where password="f"; #不能修改,权限不足

4.3 权限撤销 :  把添加用户的访问权限删除

mysql>  revoke  权限列表 on  数据库名 from  用户名@“客户端地址”;

mysql> show grants for mydba@"%";    #管理员可查看其他用户的权限
 

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+

mysql> revoke grant option on *.* from  mydba@"%";
mysql> show grants for mydba@"%";
mysql> revoke delete,insert,update on *.* from  mydba@"%";
mysql> revoke  all on *.* from  mydba@"%";


| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
 GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION       赋予权限的能力

 4.4   删除添加的用户:  drop user 用户名@“客户端的地址”;

                 mysql>  drop user mydba2@"%";

4.5授权库 mysql: 存储授权信息的库,使用不同的表记录授权信息

mysql> use mysql;

mysql> show tables;

user表   :存储已有的授权用户      mysql> desc mysql.user;   mysql> select user,host from mysql.user;

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

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

columns_priv表 :  存储授权用户对表里面字段的访问权限

管理员root 修改 授权用户的密码

set password for 用户名@“客户端"=password("abc123");

mysql> set password for yaya@"192.168.4.51"=password("abc123");

授权用户登陆后修改密码

 mysql> set password=password("123456");

用户授权--知识点总结

授权库mysql

授权命令 grant

权限撤销 revoke

删除授权用户 drop user

管理源root 修改授权用户密码

授权用户登陆后修改登陆密码

猜你喜欢

转载自blog.csdn.net/weixin_43669585/article/details/89950769