{"id":1320,"date":"2020-01-13T15:24:36","date_gmt":"2020-01-13T07:24:36","guid":{"rendered":"https:\/\/nj.transwarp.cn:8180\/?p=1320"},"modified":"2025-11-12T10:13:42","modified_gmt":"2025-11-12T02:13:42","slug":"inceptor%e8%a1%8c%e7%ba%a7%e3%80%81%e5%88%97%e7%ba%a7%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e5%ae%9e%e8%b7%b5","status":"publish","type":"post","link":"https:\/\/kbwp.transwarp.cn\/?p=1320","title":{"rendered":"Inceptor\u884c\u7ea7\u3001\u5217\u7ea7\u6743\u9650\u63a7\u5236\u5b9e\u8df5\uff08\u8001\u7248\u672c\uff09"},"content":{"rendered":"<h3>\u6982\u8981\u63cf\u8ff0<\/h3>\n<hr \/>\n<p><strong>&#8211; \u5728\u5f88\u591a\u6570\u636e\u654f\u611f\u884c\u4e1a\uff0c\u9700\u8981\u66f4\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\uff0c\u6bd4\u8f83\u666e\u904d\u7684\u9700\u6c42\u662f \u884c\u7ea7\u6743\u9650\u63a7\u5236 \u548c \u5217\u7ea7\u6743\u9650\u63a7\u5236\u3002\u8001\u7248\u672c\u7684TDH \u4e2d guardian \u8fd8\u672a\u5b9e\u73b0\u754c\u9762\u5316\u914d\u7f6e\u5982\u6b64\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u7ba1\u63a7\uff0c\u4f46\u662f Inceptor \u5df2\u7ecf\u5177\u5907\u4e86\u66f4\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\u3002\u672c\u6848\u4f8b\u9488\u5bf9 Inceptor \u8868\u505a\u884c\u548c\u5217\u7ea7\u522b\u7684\u6743\u9650\u7ba1\u63a7\u3002<\/strong><\/p>\n<ul>\n<li>\n<p>\u5982\u94f6\u884c\u6570\u636e\u4ed3\u5e93\uff0c\u64cd\u4f5c\u4eba\u5458\u5728\u67e5\u8be2\u5e26\u6709\u654f\u611f\u4fe1\u606f\u7684\u8868\u65f6\uff0c\u9700\u8981\u5bf9\u654f\u611f\u5b57\u6bb5\u8fdb\u884c\u8131\u654f\u663e\u793a\u3002<\/p>\n<\/li>\n<li>\n<p>\u5982\u94f6\u884c\u6570\u636e\u4ed3\u5e93\uff0c\u64cd\u4f5c\u4eba\u5458\u53ef\u80fd\u5c5e\u4e8e\u4e0d\u540c\u7684\u652f\u884c\uff0c\u4ed6\u4eec\u53ea\u5e94\u8be5\u770b\u5230\u5176\u6240\u5c5e\u652f\u884c\u7684\u6570\u636e\u3002\u6bd4\u8f83\u4f20\u7edf\u7684\u505a\u6cd5\u662f\uff0c\u5c06\u4e00\u5f20\u5927\u8868\u6309\u652f\u884c\u5207\u5206\u6210\u591a\u4e2a\u5c0f\u8868\u6216\u8005\u521b\u5efa\u591a\u4e2aView\uff0c\u4f46\u662f\u8fd9\u79cd\u505a\u6cd5\u5728\u8868\u6216\u8005View\u7684\u7ba1\u7406\u4e0a\u76f8\u5f53\u7e41\u7410\uff0c\u5e76\u4e14\u65e0\u6cd5\u5bf9 update, delete \u64cd\u4f5c\u505a\u884c\u7ea7\u6743\u9650\u63a7\u5236\u3002<\/p>\n<\/li>\n<\/ul>\n<h3>\u8be6\u7ec6\u8bf4\u660e<\/h3>\n<hr \/>\n<ul>\n<li>\u73af\u5883\u51c6\u5907\uff1aTDH 6.0.1<br \/>\n<strong>\u6ce8\u610f\uff1a<\/strong><\/li>\n<li><strong>\u884c\u7ea7\u6743\u9650\u63a7\u5236 TDH 4.3 \u7248\u672c\u5f00\u59cb\u652f\u6301\uff0c\u5217\u7ea7\u6743\u9650\u63a7\u5236 TDH 4.6 \u7248\u672c\u5f00\u59cb\u652f\u6301<\/strong><\/li>\n<li><strong><font color=red>\u5217\u7ea7\u6743\u9650\u63a7\u5236\u4e0d\u53ef\u4ee5\u901a\u8fc7admin\u89d2\u8272\u4e0b\u7684\u79df\u6237\u5b9e\u73b0\uff0c\u56e0\u4e3a\u76ee\u524dadmin\u89d2\u8272\u548cadmin\u6743\u9650\u662f\u7ed1\u5b9a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\u5373\u4f7f\u79df\u6237A\u5f52\u5c5e\u4e8eadmin\u89d2\u8272\uff0chas_role(&#8216;admin&#8217;)\u5224\u65ad\u8fd8\u662ffalse\uff0c\u5fc5\u987b\u6dfb\u52a0\u79df\u6237A\u7684admin\u6743\u9650has_role(&#8216;admin&#8217;)\u624d\u80fd\u662ftrue\u3002\u8fd9\u79cd\u60c5\u51b5\u6211\u4eec\u4e00\u822c\u5efa\u8bae\u907f\u5f00admin\u89d2\u8272\uff0c\u901a\u8fc7\u5176\u4ed6\u7684\u89d2\u8272\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\u4e0b\u9762\u4f8b\u5b50\u4e2d\u7684testrole\u89d2\u8272<\/font><\/strong><\/li>\n<\/ul>\n<h4>\u5217\u7ea7\u6743\u9650\u63a7\u5236<\/h4>\n<hr \/>\n<h4>1. \u6570\u636e\u51c6\u5907<\/h4>\n<pre><code class=\"language-sql\">DROP TABLE bank_account;\nCREATE TABLE bank_account (user_name string ,id_number BIGINT, email_address string)\nCLUSTERED BY (user_name) INTO 1 BUCKETS  STORED AS ORC_TRANSACTION;\n\nINSERT INTO bank_account  SELECT 'JACK',511702198907108849,'jack@126.com' FROM system.dual;\nINSERT INTO bank_account  SELECT 'TOM',320702199203128764,'tom@outlook.com' FROM system.dual;\nINSERT INTO bank_account  SELECT 'ALICE',530724198511061294,'alice@gmail.com' FROM system.dual;\nINSERT INTO bank_account  SELECT 'AMY',440183198811183889,'amy@qq.com' FROM system.dual;\n\nSELECT * FROM bank_account;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/\/nj.transwarp.cn:8180\/wp-content\/uploads\/2019\/11\/image-1572855884594.png\" alt=\"file\" \/><\/p>\n<h4>2. \u8bbe\u5b9a\u5217\u7ea7\u6743\u9650\u63a7\u5236<\/h4>\n<p>\u4e0b\u9762\u901a\u8fc7<code>has_role()<\/code>\u51fd\u6570\uff0c\u8bbe\u7f6e\u89d2\u8272\u7ea7\u522b\u7684\u5217\u7ea7\u6743\u9650\u63a7\u5236\u3002<\/p>\n<blockquote>\n<p>\u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7<code>current_role()<\/code>\u51fd\u6570\u8bbe\u7f6e\u7528\u6237\u7ea7\u7684\u5217\u7ea7\u6743\u9650\u63a7\u5236\uff0c\u8bed\u53e5\u5982\u4e0b\uff1a<br \/>\ngrant permission on bank_account for column user_name case WHEN current_user()=&#8217;hive&#8217; then user_name else mask(user_name, 1) end;<br \/>\n&#8212; \u4e0a\u8ff0\u8bed\u53e5\uff0c\u4f1a\u5728\u6267\u884cSELECT * FROM bank_account;\u65f6\uff0c\u540e\u53f0parsing\u4f1a\u8f6c\u5316\u6210select case WHEN current_user()=&#8217;hive&#8217; then user_name else mask(user_name, 1) end user_name from default.bank_account;<\/p>\n<\/blockquote>\n<pre><code class=\"language-sql\">--\u8131\u654f\u89c4\u521901\uff1a\u975etestrole\u89d2\u8272\u4e0b\u7684\u7528\u6237\u5bf9user_name\u5217\uff0c\u53ea\u663e\u793a\u7b2c\u4e00\u4e2a\u5b57\u7b26\uff0c\u5176\u4ed6\u9690\u85cf\u4e3a\u661f\u53f7\n> grant permission on bank_account for column user_name case when has_role('testrole') then user_name else mask(user_name, 1) end;\n--\u8131\u654f\u89c4\u521902\uff1a\u975etestrole\u89d2\u8272\u4e0b\u7684\u7528\u6237\u5bf9id_number\u5217\uff0c\u53ea\u663e\u793a\u524d\u4e09\u4f4d\u548c\u540e\u56db\u4f4d\uff0c\u5176\u4ed6\u9690\u85cf\n> grant permission on bank_account for column id_number case when has_role('testrole') then id_number else mask(id_number, 3, 4) end;\n--\u8131\u654f\u89c4\u521903\uff1a\u975etestrole\u89d2\u8272\u4e0b\u7684\u7528\u6237\u5bf9email_address\u5217\uff0c\u90ae\u7bb1\u524d\u7f00\u53ea\u663e\u793a\u7b2c\u4e00\u4e2a\u5b57\u6bcd\uff0c\u5176\u4ed6\u9690\u85cf\u7528\u661f\u53f7\u4ee3\u66ff\uff0c@\u7b26\u540e\u9762\u7684\u5730\u5740\u663e\u793a\n> grant permission on bank_account for column email_address case when has_role('testrole') then email_address else mask_email(email_address) end;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2020\/01\/image-1587042445533.png\" alt=\"file\" \/><\/p>\n<p><strong> mask \u51fd\u6570\u7684\u5177\u4f53\u4f7f\u7528\u65b9\u6cd5\uff0c\u53c2\u89c1 Inceptor \u7528\u6237\u4f7f\u7528\u624b\u518c<\/strong><\/p>\n<h4>3. \u7528\u6237\u6743\u9650\u6d4b\u8bd5\uff08testrole\u89d2\u8272\u7528\u6237+\u975etestrole\u89d2\u8272\u7528\u6237\uff09<\/h4>\n<h5>testrole\u89d2\u8272\u6216\u8005\u8868\u7684owner\u7528\u6237\u6d4b\u8bd5\uff1a<\/h5>\n<pre><code class=\"language-shell\">--kevin\u79df\u6237\u5728guardian\u914d\u7f6e\u4e2d\u5f52\u5c5e\u4e8einceptor\u7684testrole\u89d2\u8272\nroot@kevin1 ~# beeline -u jdbc:hive2:\/\/172.22.23.1:10000\/default --silent=true -n kevin -p 123456    \nSLF4J: Class path contains multiple SLF4J bindings.\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/hadoop\/hadoop\/lib\/slf4j-log4j12-1.7.10.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/inceptor\/lib\/shiva-client-shade-1.2.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: See http:\/\/www.slf4j.org\/codes.html#multiple_bindings for an explanation.\nSLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]\n2019-11-04 16:36:34,261 INFO jdbc.Utils: Supplied authorities: 172.22.23.1:10000\n2019-11-04 16:36:34,262 INFO jdbc.Utils: Resolved authority: 172.22.23.1:10000\n0: jdbc:hive2:\/\/172.22.23.1:10000\/default> SELECT * FROM bank_account;\n+------------+---------------------+------------------+\n| user_name  |      id_number      |  email_address   |\n+------------+---------------------+------------------+\n| JACK       | 511702198907108849  | jack@126.com     |\n| TOM        | 320702199203128764  | tom@outlook.com  |\n| ALICE      | 530724198511061294  | alice@gmail.com  |\n| AMY        | 440183198811183889  | amy@qq.com       |\n+------------+---------------------+------------------+<\/code><\/pre>\n<h5>\u975etestrole\u89d2\u8272\u6216\u8005\u8868\u7684owner\u7528\u6237\u6d4b\u8bd5\uff1a<\/h5>\n<pre><code class=\"language-shell\">--discover\u79df\u6237\u5728guardian\u914d\u7f6e\u4e2d\u4e0d\u5f52\u5c5e\u4e8einceptor\u7684testrole\u89d2\u8272\nroot@kevin1 ~# beeline -u jdbc:hive2:\/\/172.22.23.1:10000\/default --silent=true -n discover -p 123456 \nSLF4J: Class path contains multiple SLF4J bindings.\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/hadoop\/hadoop\/lib\/slf4j-log4j12-1.7.10.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/inceptor\/lib\/shiva-client-shade-1.2.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: See http:\/\/www.slf4j.org\/codes.html#multiple_bindings for an explanation.\nSLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]\n2019-11-04 16:38:06,436 INFO jdbc.Utils: Supplied authorities: 172.22.23.1:10000\n2019-11-04 16:38:06,436 INFO jdbc.Utils: Resolved authority: 172.22.23.1:10000\n0: jdbc:hive2:\/\/172.22.23.1:10000\/default>  SELECT * FROM bank_account;\n+------------+---------------------+------------------+\n| user_name  |      id_number      |  email_address   |\n+------------+---------------------+------------------+\n| J***       | 511***********8849  | j***@126.com     |\n| T**        | 320***********8764  | t**@outlook.com  |\n| A****      | 530***********1294  | a****@gmail.com  |\n| A**        | 440***********3889  | a**@qq.com       |\n+------------+---------------------+------------------+<\/code><\/pre>\n<h4>\u884c\u7ea7\u6743\u9650\u63a7\u5236<\/h4>\n<hr \/>\n<h4>1. \u6570\u636e\u51c6\u5907<\/h4>\n<pre><code class=\"language-sql\">--\u4ea4\u6613\u8868\nDROP TABLE bank_bill;\nCREATE TABLE bank_bill (id string ,fund int, sub_bank_id int)\nCLUSTERED BY (id) INTO 1 BUCKETS  STORED AS ORC_TRANSACTION;\n\nINSERT INTO bank_bill  SELECT '01',100,1 FROM system.dual;\nINSERT INTO bank_bill  SELECT '02',200,2 FROM system.dual;\nINSERT INTO bank_bill  SELECT '03',150,1 FROM system.dual;\nINSERT INTO bank_bill  SELECT '04',200,2 FROM system.dual;\n\nSELECT * FROM bank_bill;\n\n--\u7528\u6237\u8868\nDROP TABLE bank_user;\nCREATE TABLE bank_user (user_id string ,sub_bank_id int)\nCLUSTERED BY (user_id) INTO 1 BUCKETS  STORED AS ORC_TRANSACTION;\n\nINSERT INTO bank_user  SELECT 'jack',1 FROM system.dual;\nINSERT INTO bank_user  SELECT 'tom',2 FROM system.dual;\n\nSELECT * FROM bank_user;<\/code><\/pre>\n<h4>2. \u8bbe\u5b9a\u884c\u7ea7\u6743\u9650\u63a7\u5236<\/h4>\n<pre><code class=\"language-sql\">--\u63d0\u4ea4SQL\u7684\u7528\u6237\u53ea\u80fd\u591f\u770b\u5230\u5176\u6240\u5728\u652f\u884c\uff08sub_bank_id\uff09\u7684\u4ea4\u6613\u8bb0\u5f55\uff0c\u53e6\u5916\uff0c\u7ba1\u7406\u5458\u4e5f\u80fd\u591f\u770b\u5230\u8868\u7684\u6240\u6709\u6570\u636e\u3002\nGRANT PERMISSION ON TABLE bank_bill for rows\n      where sub_bank_id in (select sub_bank_id from bank_user where user_id = current_user()) or has_role('ADMIN');<\/code><\/pre>\n<blockquote>\n<p>\u6ce8\u610f\uff0c\u4e0a\u9762\u7684\u5173\u8054\u4e0d\u80fd\u7528=\uff0c\u5426\u5219\u5339\u914d\u5230\u7684\u6570\u636e\u4e0d\u6b63\u786e\u3002<\/p>\n<\/blockquote>\n<h4>3. \u7528\u6237\u6743\u9650\u6d4b\u8bd5\uff08jack+tom+admin\u89d2\u8272\u7528\u6237\uff09<\/h4>\n<h5>\u4ee5jack\u7528\u6237\u767b\u9646\uff0c\u67e5\u8be2\u4ea4\u6613\u8868 bank_bill<\/h5>\n<pre><code class=\"language-sql\">--jack\u79df\u6237\u5728guardian\u914d\u7f6e\u4e2d\u4e0d\u5f52\u5c5e\u4e8einceptor\u7684admin\u89d2\u8272\nroot@kevin1 ~# beeline -u jdbc:hive2:\/\/172.22.23.1:10000\/default --silent=true -n jack -p 123456    \nSLF4J: Class path contains multiple SLF4J bindings.\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/hadoop\/hadoop\/lib\/slf4j-log4j12-1.7.10.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/inceptor\/lib\/shiva-client-shade-1.2.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: See http:\/\/www.slf4j.org\/codes.html#multiple_bindings for an explanation.\nSLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]\n2019-11-04 16:51:54,179 INFO jdbc.Utils: Supplied authorities: 172.22.23.1:10000\n2019-11-04 16:51:54,180 INFO jdbc.Utils: Resolved authority: 172.22.23.1:10000\n0: jdbc:hive2:\/\/172.22.23.1:10000\/default> select * from bank_bill;\n+-----+-------+--------------+\n| id  | fund  | sub_bank_id  |\n+-----+-------+--------------+\n| 01  | 100   | 1            |\n| 03  | 150   | 1            |\n+-----+-------+--------------+<\/code><\/pre>\n<h5>\u4ee5tom\u7528\u6237\u767b\u9646\uff0c\u67e5\u8be2\u4ea4\u6613\u8868 bank_bill<\/h5>\n<pre><code class=\"language-sql\">--tom\u79df\u6237\u5728guardian\u914d\u7f6e\u4e2d\u4e0d\u5f52\u5c5e\u4e8einceptor\u7684admin\u89d2\u8272\nroot@kevin1 ~# beeline -u jdbc:hive2:\/\/172.22.23.1:10000\/default --silent=true -n tom -p 123456         \nSLF4J: Class path contains multiple SLF4J bindings.\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/hadoop\/hadoop\/lib\/slf4j-log4j12-1.7.10.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/inceptor\/lib\/shiva-client-shade-1.2.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: See http:\/\/www.slf4j.org\/codes.html#multiple_bindings for an explanation.\nSLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]\n2019-11-04 16:48:11,605 INFO jdbc.Utils: Supplied authorities: 172.22.23.1:10000\n2019-11-04 16:48:11,606 INFO jdbc.Utils: Resolved authority: 172.22.23.1:10000\n0: jdbc:hive2:\/\/172.22.23.1:10000\/default>       select * from bank_bill;\n+-----+-------+--------------+\n| id  | fund  | sub_bank_id  |\n+-----+-------+--------------+\n| 02  | 200   | 2            |\n| 04  | 200   | 2            |\n+-----+-------+--------------+<\/code><\/pre>\n<h5>\u4ee5admin\u89d2\u8272\u7684\u79df\u6237\u767b\u9646\uff0c\u67e5\u8be2\u4ea4\u6613\u8868 bank_bill<\/h5>\n<pre><code class=\"language-sql\">--hive\u79df\u6237\u5728guardian\u914d\u7f6e\u4e2d\u5f52\u5c5e\u4e8einceptor\u7684admin\u89d2\u8272\nroot@kevin1 ~# beeline -u jdbc:hive2:\/\/172.22.23.1:10000\/default --silent=true -n hive -p 123456      \nSLF4J: Class path contains multiple SLF4J bindings.\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/hadoop\/hadoop\/lib\/slf4j-log4j12-1.7.10.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: Found binding in [jar:file:\/root\/TDH-Client\/inceptor\/lib\/shiva-client-shade-1.2.jar!\/org\/slf4j\/impl\/StaticLoggerBinder.class]\nSLF4J: See http:\/\/www.slf4j.org\/codes.html#multiple_bindings for an explanation.\nSLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]\n2019-11-04 16:52:39,401 INFO jdbc.Utils: Supplied authorities: 172.22.23.1:10000\n2019-11-04 16:52:39,402 INFO jdbc.Utils: Resolved authority: 172.22.23.1:10000\n0: jdbc:hive2:\/\/172.22.23.1:10000\/default> select * from bank_bill;\n+-----+-------+--------------+\n| id  | fund  | sub_bank_id  |\n+-----+-------+--------------+\n| 01  | 100   | 1            |\n| 02  | 200   | 2            |\n| 03  | 150   | 1            |\n| 04  | 200   | 2            |\n+-----+-------+--------------+<\/code><\/pre>\n<h4>FAQ1:<\/h4>\n<h5>1. \u5982\u4f55\u83b7\u53d6\u6240\u6709\u914d\u7f6e\u4e86\u5217\u7ea7\u6743\u9650\u7684\u8868<\/h5>\n<pre><code class=\"language-sql\">SELECT\n    <code>col<\/code>.<code>INTEGER_IDX<\/code> AS <code>column_id<\/code>,\n    <code>col<\/code>.<code>COLUMN_NAME<\/code> AS <code>column_name<\/code>,\n    <code>col<\/code>.<code>TYPE_NAME<\/code> AS <code>column_type<\/code>,\n    <code>DBS<\/code>.<code>NAME<\/code> AS <code>database_name<\/code>,\n    <code>TBLS<\/code>.<code>TBL_NAME<\/code> AS <code>table_name<\/code>,\n    <code>col<\/code>.<code>COMMENT<\/code> AS <code>commentString<\/code>,\n    <code>col<\/code>.<code>DEFAULT_VAL<\/code> AS <code>default_value<\/code>,\n    <code>col<\/code>.<code>NOTNULL_CONSTRAINT<\/code> AS <code>nullable<\/code>,\n    <code>col<\/code>.<code>UNIQUE_CONSTRAINT<\/code> AS <code>unique_constraint<\/code>,\n    <code>col<\/code>.<code>PERMISSION<\/code>\nFROM <code>COLUMNS_V2<\/code>@<code>system_dblink<\/code> <code>col<\/code>\nJOIN <code>SDS<\/code>@<code>system_dblink<\/code> ON <code>col<\/code>.<code>CD_ID<\/code> = <code>SDS<\/code>.<code>CD_ID<\/code>\nJOIN <code>TBLS<\/code>@<code>system_dblink<\/code> ON <code>SDS<\/code>.<code>SD_ID<\/code> = <code>TBLS<\/code>.<code>SD_ID<\/code>\nJOIN <code>DBS<\/code>@<code>system_dblink<\/code> ON <code>TBLS<\/code>.<code>DB_ID<\/code> = <code>DBS<\/code>.<code>DB_ID<\/code>\nWHERE col.PERMISSION IS NOT NULL;\n\n--\u6216\u8005\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u7684\u65b9\u5f0f\u83b7\u53d6\u8868\u4fe1\u606f\nselect * from TBLS@system_dblink WHERE cls_enabled=1;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2020\/01\/image-1726041113145.png\" alt=\"file\" \/><\/p>\n<h5>2. \u67e5\u770b\u67d0\u5f20\u8868\u8bbe\u7f6e\u7684\u5217\u7ea7\u6743\u9650\u914d\u7f6e<\/h5>\n<pre><code class=\"language-sql\">show permission on table bank_account;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2020\/01\/image-1727248679795.png\" alt=\"file\" \/><\/p>\n<h5>3. \u5982\u4f55\u83b7\u53d6\u6240\u6709\u914d\u7f6e\u4e86\u884c\u7ea7\u6743\u9650\u7684\u8868<\/h5>\n<pre><code class=\"language-sql\">select db_id,tbl_name,row_permission from TBLS@system_dblink WHERE row_permission is not null;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2020\/01\/image-1727248936799.png\" alt=\"file\" \/><\/p>\n<h5>4. \u67e5\u770b\u67d0\u5f20\u8868\u8bbe\u7f6e\u7684\u884c\u7ea7\u6743\u9650\u914d\u7f6e<\/h5>\n<pre><code class=\"language-sql\">show permission on table bank_bill;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2020\/01\/image-1727248657823.png\" alt=\"file\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981\u63cf\u8ff0 &#8211; \u5728\u5f88\u591a\u6570\u636e\u654f\u611f\u884c\u4e1a\uff0c\u9700\u8981\u66f4\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\uff0c\u6bd4\u8f83\u666e\u904d\u7684\u9700\u6c42\u662f \u884c\u7ea7\u6743\u9650\u63a7\u5236 \u548c \u5217\u7ea7 ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"https:\/\/kbwp.transwarp.cn\/?p=1320\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-1320","post","type-post","status-publish","format-standard","hentry","category-configuration"],"acf":[],"_links":{"self":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/1320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1320"}],"version-history":[{"count":3,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/1320\/revisions"}],"predecessor-version":[{"id":17677,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/1320\/revisions\/17677"}],"wp:attachment":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}