File: privileges_by_table_by_level.sql

package info (click to toggle)
mariadb 1%3A11.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 772,520 kB
  • sloc: ansic: 2,414,714; cpp: 1,791,394; asm: 381,336; perl: 62,905; sh: 49,647; pascal: 40,897; java: 39,363; python: 20,791; yacc: 20,432; sql: 17,907; xml: 12,344; ruby: 8,544; cs: 6,542; makefile: 6,145; ada: 1,879; lex: 1,193; javascript: 996; objc: 80; tcl: 73; awk: 46; php: 22
file content (77 lines) | stat: -rw-r--r-- 3,422 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
--
-- View: privileges_by_table_by_level
--
-- Shows granted privileges broken down by the table on which they allow access
-- and the level on which they were granted:
-- - user_privileges
-- - schema_privileges
-- - table_privileges
--
-- mysql> select * from sys.privileges_by_table_by_level;
-- +--------------+------------+--------------------+----------------+--------+
-- | TABLE_SCHEMA | TABLE_NAME | GRANTEE            | PRIVILEGE_TYPE | LEVEL  |
-- +--------------+------------+--------------------+----------------+--------+
-- | test         | v1         | 'oleg'@'localhost' | SELECT         | GLOBAL |
-- | test         | t1         | 'oleg'@'localhost' | SELECT         | GLOBAL |
-- | test         | v1         | 'oleg'@'localhost' | INSERT         | GLOBAL |
-- | test         | t1         | 'oleg'@'localhost' | INSERT         | GLOBAL |
-- | test         | v1         | 'oleg'@'localhost' | UPDATE         | GLOBAL |
-- | test         | v1         | 'PUBLIC'@''        | SELECT         | SCHEMA |
-- | test         | t1         | 'PUBLIC'@''        | SELECT         | SCHEMA |
-- | test         | v1         | 'PUBLIC'@''        | INSERT         | SCHEMA |
-- | test         | t1         | 'PUBLIC'@''        | INSERT         | SCHEMA |
-- | test         | v1         | 'PUBLIC'@''        | UPDATE         | SCHEMA |
-- | test         | t1         | 'PUBLIC'@''        | UPDATE         | SCHEMA |
-- | test         | v1         | 'PUBLIC'@''        | DELETE HISTORY | SCHEMA |
-- | test         | t1         | 'PUBLIC'@''        | DELETE HISTORY | SCHEMA |
-- | test         | t1         | 'oleg'@'%'         | SELECT         | TABLE  |
-- | test         | t1         | 'oleg'@'%'         | UPDATE         | TABLE  |
-- | test         | v1         | 'oleg'@'%'         | SELECT         | TABLE  |
-- +--------------+------------+--------------------+----------------+--------+

CREATE OR REPLACE
  ALGORITHM = TEMPTABLE
  DEFINER = 'mariadb.sys'@'localhost'
  SQL SECURITY INVOKER
VIEW privileges_by_table_by_level (
  TABLE_SCHEMA,
  TABLE_NAME,
  GRANTEE,
  PRIVILEGE,
  LEVEL
) AS
SELECT t.TABLE_SCHEMA,
       t.TABLE_NAME,
       privs.GRANTEE,
       privs.PRIVILEGE_TYPE,
       privs.LEVEL
FROM INFORMATION_SCHEMA.TABLES AS t
JOIN ( SELECT NULL AS TABLE_SCHEMA,
              NULL AS TABLE_NAME,
              GRANTEE,
              PRIVILEGE_TYPE,
             'GLOBAL' LEVEL
           FROM INFORMATION_SCHEMA.USER_PRIVILEGES
         UNION
       SELECT TABLE_SCHEMA,
              NULL AS TABLE_NAME,
              GRANTEE,
              PRIVILEGE_TYPE,
              'SCHEMA' LEVEL
           FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
         UNION
       SELECT TABLE_SCHEMA,
              TABLE_NAME,
              GRANTEE,
              PRIVILEGE_TYPE,
              'TABLE' LEVEL
           FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
       ) privs
    ON (t.TABLE_SCHEMA = privs.TABLE_SCHEMA OR privs.TABLE_SCHEMA IS NULL)
   AND (t.TABLE_NAME = privs.TABLE_NAME OR privs.TABLE_NAME IS NULL)
   AND privs.PRIVILEGE_TYPE IN ('SELECT', 'INSERT', 'UPDATE', 'DELETE',
                                'CREATE', 'ALTER', 'DROP', 'INDEX',
                                'REFERENCES', 'TRIGGER', 'GRANT OPTION',
                                'SHOW VIEW', 'DELETE HISTORY')
WHERE t.TABLE_SCHEMA NOT IN ('sys', 'mysql','information_schema',
                             'performance_schema');