分类: MySQL
MySQL视图查看及权限说明

查看视图是指查看数据库中,已经存在的视图的定义 必须要有SHOW VIEW的权限
查看视图有三种方式:
DESCRIBE语句
使用DESCRIBE语句,查看视图
MySQL中,使用DESCRIBE可以查看视图的字段信息,其中,包括字段名、字段类型等信息
语法格式:

DESCRIBE 视图名; 
或者
DESC 视图名;
root@sso_db_69 17:58:  [escdb]> desc oa_org;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id          | varchar(36)  | NO   |     | NULL    |       |
| name        | varchar(255) | NO   |     | NULL    |       |
| fullName    | varchar(255) | YES  |     | NULL    |       |
| resource_id | varchar(255) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

参数说明

NULL,表示该列是否可以存储NULL值 
Key,表示该列是否已经编制索引 
Default,表示该列是否有默认值 
Extra,表示获取到的与给定列相关的附加信息

查看视图的名称、创建语句、字符编码等信息:
语法格式

SHOW CREATE VIEW 视图名;

参数说明
视图名,表示要查看的视图名称

show create view oa_org\G;
*************************** 1. row ***************************
                View: oa_org
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `oa_org` AS select `pi_accorg`.`id` AS `id`,`pi_accorg`.`name` AS `name`,`pi_accorg`.`fullName` AS `fullName`,`pi_accorg_pi_externalresource`.`resource_id` AS `resource_id` from (`pi_accorg` join `pi_accorg_pi_externalresource` on((`pi_accorg_pi_externalresource`.`accorg_id` = `pi_accorg`.`id`))) where (`pi_accorg_pi_externalresource`.`resource_id` = 'OA')
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
1 row in set (0.00 sec)

查看基本信息:
包括存储引擎、创建时间等,Comment项没有信息,说明这是一个表,而不是视图,这就是视图和普通表最直接的区别

show table status like 'oa_org'\G;
*************************** 1. row ***************************
           Name: oa_org
         Engine: NULL
        Version: NULL
     Row_format: NULL
           Rows: NULL
 Avg_row_length: NULL
    Data_length: NULL
Max_data_length: NULL
   Index_length: NULL
      Data_free: NULL
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: NULL
       Checksum: NULL
 Create_options: NULL
        Comment: VIEW
1 row in set (0.01 sec)

开启查看视图权限:

grant show view on database.* to username@'192.168.%';

创建视图权限:

grant create view on database.* to username@'xxx.xxx.%';

如果赋权以后不能查看视图数据内容,需要确认视图定义者是否存在,默认定义者安全设置是DEFINER,保证视图定义账号存在即可,不存在则需要创建相同账号,否则不能查看视图数据内容,如果要执行则

definer和invoker的区别
在创建视图或者是存储过程的时候,是需要定义安全验证方式的(也就是安全性SQL SECURITY),其值可以为definer或invoker,表示在执行过程中,使用谁的权限来执行。

definer:由definer(定义者)指定的用户的权限来执行

当定义为DEFINER时,必须数据库中存在DEFINER指定的用户,并且该用户拥有对应的操作权限,才能成功执行。与当前用户是否有权限无关。
invoker:由调用这个视图(存储过程)的用户的权限来执行

当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。


相关博文:

发表新评论