中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Data Lake Analytics賬號和權限體系的分析

發布時間:2021-12-23 17:41:09 來源:億速云 閱讀:139 作者:柒染 欄目:云計算

今天就跟大家聊聊有關如何進行Data Lake Analytics賬號和權限體系的分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、Data Lake Analytics介紹

基于數據湖做分析,可以不用做任何ETL、數據搬遷等前置過程,實現跨各種異構數據源進行大數據關聯分析,從而極大的節省成本和提升用戶體驗。

下圖是DLA的簡易架構(__MPP計算引擎+存儲計算分離+彈性高可用+異構數據集源等)__:

如何進行Data Lake Analytics賬號和權限體系的分析cdn.nlark.com/lark/0/2018/png/103052/1541757933088-c409a27e-3db2-45bb-9228-98f37d52550c.png">

二、自建賬號

目前DLA是以MySQL協議方式對外提供服務,用戶需要通過JDBC連接,連到DLA服務。DLA內部的賬號和密碼是獨立自建的(與RAM不同),對應的賬號和密碼信息,在用戶開通DLA服務時以站內信、郵件、短信等方式通知您。

可能您會疑惑,為什么DLA不是以RAM或AK賬號做認證和授權,而需要自建賬號。在這里,做一些簡單的介紹:

  • DLA是數據庫,在客戶端建立連接(需要認證)、訪問庫、表、字段(需要鑒權)時,大量跨服務訪問RAM系統,會給RAM系統造成很大壓力,且可能會影響DLA服務延時;

  • DLA是數據庫,需要兼容MySQL權限模型,庫、表、字段等領域對象很難一一映射到RAM體系;同時RAM下的資源對象的權限粒度可粗可細,且更多偏向于管理數據生命周期而非詳細數據層面的權限;

  • 用戶習慣的Grant、Revoke、Show grants等邏輯,都是直接和傳統數據庫的庫、表、字段一一映射。

  • 參考了阿里云上及業界云服務平臺上其他數據庫產品的設計,存在一樣的考量;


三、三種賬號模型

  • Root/Service賬號:RAM主賬號在某個Region內開通DLA服務時,系統會自動創建第一個DLA賬戶,并以站內信、短信、郵件方式通知RAM主賬號,Root賬號只有一個,不能刪除;

  • User/子賬號:由RAM主賬號后續在Console上創建的新的DLA的User賬號(注意,不是由Root賬號創建的),云賬號用戶可以創建、刪除User賬號,也可以為其修改密碼等;

  • Product賬號:其他云產品(比如DBS)與DLA交互時,由用戶在RAM中為該云產品授權過,由DLA自動產生并派發給云產品的賬號;

  • Root賬號和User賬號,關聯的RAM uid都是對應的云賬號,從而Root和User賬號都有機會訪問云賬號所有的資源(當然,這都是在授權管理之內);

四、賬號實測操作

a)開通服務并初始化服務

找到服務:

如何進行Data Lake Analytics賬號和權限體系的分析

購買:

如何進行Data Lake Analytics賬號和權限體系的分析

為不同的Region初始化服務:

如何進行Data Lake Analytics賬號和權限體系的分析

初始化完成,得到一個Root賬號:

如何進行Data Lake Analytics賬號和權限體系的分析

配置服務訪問點

如何進行Data Lake Analytics賬號和權限體系的分析

b)連接數據庫并通過認證

連接DLA服務,并進入服務

##連接DLA服務,賬號和密碼都在您的收件箱內,服務訪問點則在服務頁面
[root]# mysql -u<您的dla用戶名> -p<您的dla密碼> -h<您的dla服務訪問點> -P10000

## 進入DLA服務,開始測試之旅
mysql> show databases;
Empty set (0.09 sec)

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

連接DLA服務,并進入服務,也能正常工作了。

五、權限模型

DLA中有兩層權限驗證機制,確保您的數據被安全訪問:

  • DLA層授權和校驗校驗,基于MySQL語法而定義和實現(Grant:https://dev.mysql.com/doc/refman/5.7/en/grant.html、Revoke:https://dev.mysql.com/doc/refman/5.7/en/revoke.html、Show Grants:https://dev.mysql.com/doc/refman/5.7/en/show-grants.html)

  • 數據源和RAM層授權和校驗,基于RAM的的訪問控制而實現(比如OSS、TableStore等云原生產品):https://help.aliyun.com/product/28625.html,或者基于數據源本身的權限校驗(比如RDS,是自建賬號,因而也有自建權限系統)

  • 用戶的SQL發送到DLA,做完DLA的權限校驗后,再轉發到后端數據源層,執行RAM層和數據源的權限校驗,最后再真正訪問到用戶的數據;

a)DLA層校驗原理

DLA是根據用戶操作對象的范圍“從大到小”驗證的,從Global級(全局權限),到Schema級,再到Table級,最后到Column級(目前不支持)一層層驗證權限。任何一層有權限校驗成功,到最后一層也沒權限時校驗失敗:

如何進行Data Lake Analytics賬號和權限體系的分析

b)DLA層授權方法

基本上參考了MySQL的Grant/Revoke/Show Grants語法來實現:

##grant相關
GRANT {SELECT | SHOW | ALTER | DROP | CREATE | INSERT | UPDATE | DELETE | GRANT OPTION | ALL | ALL PRIVILEGES | USAGE }
ON {* | *.* | xxDb.* | xxDb.yyTable | yyTable }
TO { oa_1234546 | 'oa_123456' | 'oa_123456'@'1.2.3.4'}
[with grant option]

##revoke相關
REVOKE {SELECT | SHOW | ALTER | DROP | CREATE | INSERT | UPDATE | DELETE |GRANT OPTION |  ALL | ALL PRIVILEGES | USAGE}
ON {* | *.* | xxDb.* | xxDb.yyTable  | yyTable }
FROM { oa_1234546 | 'oa_123456' | 'oa_123456'@'1.2.3.4'}

##show grants相關
SHOW GRANTS 
[for [ current_user | current_user() | oa_123456 | 'oa_123456' | 'oa_123456'@'localhost'] ]
相關關鍵信息說明:
  • 授權人:

    • 只能由DLA的root賬號給其他非Root賬號授權;

    • 暫時不支持非Root賬號給其他賬號授權;

    • 不能跨云賬號授權和回收權限;

  • privilege列表:

    • 可以用','連接在一起,比如SELECT,DELETE,UPDATE,INSERT,...

    • 有ALL或ALL PRIVILEGES就會全部授權或者全部回收,無視其他的Privilege;但一定要注意,grant option這個權限本身,不包含在ALL中,必須顯式授權或者回收

    • 暫時不支持其他類型的授權;

    • SELECT是為Query授權;

    • SHOW為show、use命令授權(這里與mysql的邏輯差異比較大);

    • ALTER為alter或其他變更型的ddl授權;

    • CREATE為create型的ddl授權;

    • DROP為drop型的ddl授權;

    • INSERT為insert型的dml授權;

    • UPDATE為update型的dml授權;

    • DELETE為delete型的dml授權;

    • GRANT OPTION為dcl授權(grant和revoke相關);可以在Privilege中指定GRANT OPTION,也可以通過語句片段with grant option來做grant 授權;

    • USAGE其實啥也沒有,表示為空;

  • ResourceType中:

    • * 表示當前連接使用了某個庫xxDB,然后針對xxDB做授權,庫級別權限;

    • . 表示所有庫的所有表授權,Global級別權限;

    • xxDb.* 表示針對xxDB這個庫做授權,庫級別權限;

    • xxDb.yyTable 表示針對xxDB庫的xxTable做授權,表級別權限;

    • yyTable 表示當前連接使用了某個庫xxDB,針對xxDB庫的xxTable做授權,表級別權限;

    • 暫時不支持字段級別的授權;

  • 被授權用戶定義:

    • 直接寫用戶名:oa_123456

    • 用戶字符串來表示:'oa_123456'

    • 即使寫了ip、host信息,也不會用于連接的白名單校驗;

  • 只有相同云賬號下的Root用戶才能為別人show grants;

  • 不能跨不同uid執行show grant

  • 必須有show權限和grant權限才能執行show grants,或者為本人執行__;__

  • SHOW GRANTS FOR 'jeffrey'@'localhost':目前不支持ip地址;

c)DLA與RAM間權限映射

因為DLA中的子賬號與RAM中的子賬號并不是一一對應,因而RAM中資源的權限和DLA中庫表的權限也不是自然映射的,而是需要在DLA中以特殊定義的方式來做資源的映射和權限的隔離。

目前DLA中授權單位是Schema級別的,也就意味著如果Root賬號給某個User賬號授權了一個庫的權限,那這個User賬號能夠訪問這個庫下所有的表,也就意味著能夠訪問該庫映射到RAM上所有的資源,這些訪問并不受RAM的子賬號權限控制。

比如,我們看一個典型的建庫語句(假設用戶已經可以在DLA中創建相關的庫):

CREATE DATABASE db_name 
with dbproperties (
  CATALOG = 'ots',
  LOCATION = 'https://test-hangzhou.ots.aliyuncs.com',
  INSTANCE = 'test'
)

如果Root賬號給某個User賬后執行Grant操作后,該User賬號就可以訪問這個庫:

grant all on db_name.* to xxx_s1519122757;

上述過程都假設云賬號的系統角色授權已經完成,下一節我們介紹首先如何完成系統角色授權,從而允許DLA訪問你在其他云產品中的數據。

d)系統角色授權

系統角色授權是指:用戶給DLA授權,允許DLA訪問用戶相關云服務里的數據,從而實現DLA關聯分析用戶數據的目標,或者通過DLA實現ETL,將數據回流到用戶的庫。具體過程可以參考:https://help.aliyun.com/document_detail/53478.html

e)跨賬號訪問

DLA支持跨賬號,允許A用戶在DLA上,連接B用戶的OSS上的數據進行分析計算,不過這需要做一些操作,后續文檔會以圖形化的方式來介紹和引導用戶:

如何進行Data Lake Analytics賬號和權限體系的分析

庫建完后,去建表

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

插入一行數據

如何進行Data Lake Analytics賬號和權限體系的分析

點擊同意授權:

如何進行Data Lake Analytics賬號和權限體系的分析

查看角色授權已經成功:

image.png | left | 747x413

c)在DLA中創建庫和表,關聯TableStore庫和表

我們重新回到DLA Root賬號(oa_xxx),通過JDBC協議連接到DLA(賬號信息、DLA訪問點、JDBC連接方式,請參考前面文檔)

╰─○ mysql -u<您的DLA Root賬號> -p<您的DLA Root賬號的密碼> -h<您的DLA-jdbc訪問點> -P10000 

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 194631
Server version: 5.6.40-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

開始創建庫,去關聯TableStore中的實例:

mysql> select user();
+----------------+
| user()         |
+----------------+
| oa_xxxxxxxxxxx |
+----------------+
1 row in set (0.08 sec)

mysql> show databases;                                                                                                                                                                                      Empty set (0.02 sec)

mysql> create database ots_account_test 
with dbproperties(
  catalog = 'ots',
  location = 'https://account-test.cn-shanghai.ots-internal.aliyuncs.com',
 instance = 'account-test'
) comment 'test account and privileges';
Query OK, 0 rows affected (0.10 sec)

mysql> show databases;
+------------------+
| Database         |
+------------------+
| ots_account_test |
+------------------+
1 row in set (0.01 sec)

mysql> show create database ots_account_test;
+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Database         | Create Database                                                                                                                                                                                                       |
+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ots_account_test | CREATE DATABASE `ots_account_test`
WITH DBPROPERTIES (
    catalog = 'ots',
    location = 'https://account-test.cn-shanghai.ots-internal.aliyuncs.com',
    instance = 'account-test'
)
COMMENT 'test account and privileges' |
+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.03 sec)

開始創建表,去關聯TableStore中的表,并查詢數據(結果與OTS中的結果一致):

mysql> use ots_account_test;
Database changed

mysql> show tables;
Empty set (0.03 sec)

mysql> create external table account_test (
    -> pk1 int not null primary key,
    -> name varchar(20) 
    -> );
Query OK, 0 rows affected (0.15 sec)

mysql> show create table account_test;
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                  |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| account_test | CREATE EXTERNAL TABLE `account_test` (
    `pk1` int NOT NULL COMMENT '',
    `name` varchar(20) NULL COMMENT '',
    PRIMARY KEY (`pk1`)
)
COMMENT '' |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

mysql> select * from account_test;
+------+--------------+
| pk1  | name         |
+------+--------------+
|  123 | account-test |
+------+--------------+
1 row in set (1.61 sec)

至此,我們已經成功完成了數據關聯并實現數據查詢的過程!!

d)把庫和表授權給子賬號來訪問

上訴都是Root賬號在操作,從前面的分析可知,Root賬號是可以操作對應云賬號所有的云資源的,但是DLA的User賬號卻不行,必須通過Root賬號給User賬號Grant權限,DLA才能允許某個User賬號訪問對應的庫和表:

切換到User賬號/子賬號連接頁面,此時看不到任何庫表:

mysql> select user();
+------------------------+
| user()                 |
+------------------------+
| test_sxxxxxxxxxxxxxxxx |
+------------------------+
1 row in set (0.14 sec)

mysql> show databases;
Empty set (0.02 sec)

mysql> show grants ;
+------------------------------------------------+
| Grants for test_sxxxxxxxxxxxxxxxx              |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_sxxxxxxxxxxxxxxxx' |
+------------------------------------------------+
1 row in set (0.03 sec)

切換Root賬號連接頁面,我們給前面的賬號授權:

mysql> select user();
+------------------------+
| user()                 |
+------------------------+
| oa_xxxxxxxxxxx |
+------------------------+
1 row in set (0.14 sec)

mysql> show grants for test_sxxxxxxxxxxxxxxxx;
+---------------------------------------------------------------+
| Grants for test_sxxxxxxxxxxxxxxxx                             |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_sxxxxxxxxxxxxxxxx'                |
+---------------------------------------------------------------+
1 rows in set (0.02 sec)


mysql> grant all on ots_account_test.* to test_sxxxxxxxxxxxxxxxx;
Query OK, 0 rows affected (0.05 sec)


mysql> show grants for test_sxxxxxxxxxxxxxxxx;
+---------------------------------------------------------------+
| Grants for test_sxxxxxxxxxxxxxxxx                             |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_sxxxxxxxxxxxxxxxx'                |
| GRANT ALL ON `ots_account_test`.* TO 'test_sxxxxxxxxxxxxxxxx' |
+---------------------------------------------------------------+
2 rows in set (0.03 sec)

切換User賬號連接頁面,重新查詢看看,已經有權限了,并且可以讀取數據:

mysql> select user();
+------------------------+
| user()                 |
+------------------------+
| test_sxxxxxxxxxxxxxxxx |
+------------------------+
1 row in set (0.14 sec)


mysql> show grants ;
+---------------------------------------------------------------+
| Grants for test_sxxxxxxxxxxxxxxxx                             |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_sxxxxxxxxxxxxxxxx'                |
| GRANT ALL ON `ots_account_test`.* TO 'test_sxxxxxxxxxxxxxxxx' |
+---------------------------------------------------------------+
2 rows in set (0.02 sec)


mysql> show databases;
+------------------+
| Database         |
+------------------+
| ots_account_test |
+------------------+
1 row in set (0.02 sec)


mysql> select * from ots_account_test.account_test;
+------+--------------+
| pk1  | name         |
+------+--------------+
|  123 | account-test |
+------+--------------+
1 row in set (0.43 sec)

至此,子賬號授權訪問就可以了!

e)支持跨賬號訪問

一般情況,用戶大部分使用DLA的場景是,云賬號A使用DLA訪問云賬號A在其他云產品中的數據,從前面的分析可以知道,只要用戶在DLA的console上選擇具體的數據源(比如TableStore)給DLA做系統角色授權之后,就可以打通數據源,創建庫表和查詢數據了。

但是,還有一種場景是:云賬號A使用DLA來訪問云賬號B在其他云產品(以下以TableStore)中的數據,這需要專門的角色授權才能正常運行:

如何進行Data Lake Analytics賬號和權限體系的分析

假設上述測試賬號對應的云賬號為A,下面就以TableStore和另一個云賬號B(DLA另一個真實的測試云賬號)作為案例,演示B賬號給A賬號針對TableStore中某個instance做跨賬號授權,并且A在DLA中完成查詢的過程。

首先,需要到B賬號內,在"訪問控制(https://ram.console.aliyun.com)"中創建一個跨賬號授權的角色:

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

如何進行Data Lake Analytics賬號和權限體系的分析

image.png | left | 747x259

重新使用云賬號A的DLA Root賬號,通過MySQL-cli連接到DLA,然后連接和訪問云賬號B的數據:

mysql> select user();
+----------------+
| user()         |
+----------------+
| oa_xxxxxxxxxxx |
+----------------+
1 row in set (0.06 sec)

mysql> show databases;
+------------------+
| Database         |
+------------------+
| ots_account_test |
+------------------+
1 row in set (0.24 sec)

mysql> create database ots_cross_account_test  
with dbproperties(
  catalog = 'ots',
  location = 'https://test-sh.cn-shanghai.ots-internal.aliyuncs.com', --云賬號B的TableStore instance
  instance = 'test-sh',
  cross_account_accessing_arn= 'acs:ram::1013xxxxxx:role/test-cross-account-accessing-role'  --云賬號B為云賬號A@云服務DLA的跨賬號角色授權時的Arn信息
);
Query OK, 0 rows affected (0.14 sec)

mysql> show databases ;
+------------------------+
| Database               |
+------------------------+
| ots_account_test       |
| ots_cross_account_test |
+------------------------+
2 rows in set (0.18 sec)

mysql> show create database ots_cross_account_test;
+------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Database               | Create Database                                                                                                                                                                                                                                                                           |
+------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ots_cross_account_test | CREATE DATABASE `ots_cross_account_test`
WITH DBPROPERTIES (
    catalog = 'ots',
    location = 'https://test-sh.cn-shanghai.ots-internal.aliyuncs.com',
    instance = 'test-sh',
    cross_account_accessing_arn = 'acs:ram::1013xxxxxx:role/test-cross-account-accessing-role'
)
COMMENT '' |
+------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.19 sec)

mysql> use ots_cross_account_test;
Database changed

mysql> show tables;
Empty set (0.19 sec)

mysql> create external table test_table1 (
  id1 int not null primary key,
  col1 int 
);
Query OK, 0 rows affected (0.31 sec)

mysql> show tables;
+-------------+
| Table_Name  |
+-------------+
| test_table1 |
+-------------+
1 row in set (0.20 sec)

mysql> show create table test_table1;
+-------------+--------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                         |
+-------------+--------------------------------------------------------------------------------------------------------------------------------------+
| test_table1 | CREATE EXTERNAL TABLE `test_table1` (
    `id1` int NOT NULL COMMENT '',
    `col1` int NULL COMMENT '',
    PRIMARY KEY (`id1`)
)
COMMENT '' |
+-------------+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.20 sec)

mysql> select * from test_table1;
+--------+------+
| id1    | col1 |
+--------+------+
|      0 | -111 |
| 111111 |  111 |
+--------+------+
2 rows in set (1.29 sec)

順便提醒一下,普通的建庫流程中是不需要cross_account_accessing_arn參數的,意味著默認是云賬號自己給自己開通了DLA訪問云服務的權限,而有了cross_account_accessing_arn參數,就表示跨賬號服務的開啟,這個DLA中的庫以及庫下面的表,都有了跨賬號訪問的權限!!

看完上述內容,你們對如何進行Data Lake Analytics賬號和權限體系的分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新源县| 顺昌县| 峨眉山市| 玛多县| 高陵县| 凭祥市| 武冈市| 射阳县| 永靖县| 鄄城县| 紫阳县| 秭归县| 历史| 濉溪县| 合江县| 洛宁县| 昌都县| 北京市| 湛江市| 毕节市| 尖扎县| 高清| 旅游| 霍林郭勒市| 新竹市| 江城| 共和县| 东兰县| 民权县| 霍邱县| 交城县| 乌苏市| 忻城县| 磐安县| 景宁| 会泽县| 大足县| 芜湖市| 班玛县| 枞阳县| 新密市|