数据仓库服务 GAUSSDB(DWS)-创建外部服务器:(可选)新建用户及数据库并授予外表权限

时间:2023-11-22 14:18:34

(可选)新建用户及数据库并授予外表权限

如果您将使用普通用户在自定义数据库中创建外部服务器和外表,由于普通用户没有外表权限无法创建,所以,您必须参照以下步骤新建用户和数据库,并授予该用户外表权限。

以下示例,是新建一个普通用户dbuser并创建一个数据库mydatabase,然后使用管理员用户授予dbuser外表权限。

  1. 使用数据库管理员通过 GaussDB (DWS)提供的数据库客户端连接默认数据库gaussdb

    例如,使用gsql客户端的用户执行下面命令连接数据库:

    1
    gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r
    

  2. 新建一个普通用户,并用它创建一个数据库。

    新建一个具有创建数据库权限的用户dbuser:

    1
    CREATE USER dbuser WITH CREATEDB PASSWORD 'password';
    
    切换为新建的用户:
    1
    SET ROLE dbuser PASSWORD 'password';
    
    执行以下命令创建数据库:
    1
    CREATE DATABASE mydatabase;
    

    查询数据库:

    1
    SELECT * FROM pg_database;
    

    返回结果中有mydatabase的信息表示创建成功:

    datname   | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility |                       datacl
    
    ------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+---------------+------------------+--------------------------------------
    --------------
     template1  |     10 |        0 | C          | C        | t             | t            |           -1 |         14146 |         1351 |          1663 | ORA              | {=c/Ruby,Ruby=CTc/Ruby}
     template0  |     10 |        0 | C          | C        | t             | f            |           -1 |         14146 |         1350 |          1663 | ORA              | {=c/Ruby,Ruby=CTc/Ruby}
     gaussdb   |     10 |        0 | C          | C        | f             | t            |           -1 |         14146 |         1352 |          1663 | ORA              | {=Tc/Ruby,Ruby=CTc/Ruby,chaojun=C/Ruby,hu
    obinru=C/Ruby}
     mydatabase |  17000 |        0 | C          | C        | f             | t            |           -1 |         14146 |         1351 |          1663 | ORA              |
    (4 rows)

  3. 使用管理员用户给普通用户赋予创建外部服务器的权限和使用外表的权限。

    使用数据库管理员用户通过GaussDB(DWS)提供的数据库客户端连接新建的数据库。

    例如,使用gsql客户端的用户可以直接使用如下语句切换为管理员用户去连接新建的数据库:

    1
    \c mydatabase dbadmin;
    

    根据提示输入管理员用户密码。

    注意,必须先使用管理员用户连接到将要创建外部服务器和使用外表的数据库,再对普通用户进行授权。

    默认只有系统管理员才可以创建外部服务器,普通用户需要授权才可以创建,执行以下命令授权:
    1
    2
    GRANT ALL ON SCHEMA public TO dbuser;
    GRANT ALL ON FOREIGN DATA WRAPPER dfs_fdw TO dbuser;
    

    其中fdw_name的名字可以是hdfs_fdw或者dfs_fdw,dbuser为创建SERVER的用户名。

    执行以下命令赋予用户使用外表的权限。

    1
    ALTER USER dbuser USEFT;
    

    查看用户:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    SELECT r.rolname, r.rolsuper, r.rolinherit,
      r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
      r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil,
      ARRAY(SELECT b.rolname
            FROM pg_catalog.pg_auth_members m
            JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
            WHERE m.member = r.oid) as memberof
    , r.rolreplication
    , r.rolauditadmin
    , r.rolsystemadmin
    , r.roluseft
    FROM pg_catalog.pg_roles r
    ORDER BY 1;
    

    返回结果中dbuser的信息中包含了UseFT权限,表示授权成功:

    rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolconnlimit | rolvalidbegin | rolvaliduntil | memberof | rolreplication | rolauditadmin | rolsystemadmin | roluseft
    -----------+----------+------------+---------------+-------------+-------------+--------------+---------------+---------------+----------+----------------+---------------+----------------+----------
     dbuser    | f        | t          | f             | t           | t           |           -1 |               |               | {}       | f              | f             | f              | t
     lily      | f        | t          | f             | f           | t           |           -1 |               |               | {}       | f              | f             | f              | f
     Ruby       | t        | t          | t             | t           | t           |           -1 |               |               | {}       | t              | t             | t              | t  

support.huaweicloud.com/devg-820-dws/dws_04_0244.html