SQL 표준 기반 Hive 권한 부여

SQL 표준 기반 Hive 권한 부여 (SQL Standard Based Hive Authorization)

Hive 0.13 이전의 Hive 권한 부여 상태

Hive의 기본 권한 부여는 악의적인 사용자가 접근해서는 안 되는 데이터에 접근하는 것을 막으려는 의도로 설계되지는 않았어요. 사용자가 하면 안 되는 작업을 우연히 수행하는 것만 방지할 뿐입니다. 또한 grant 문을 포함한 많은 작업에 대한 권한 검사가 없어 불완전합니다. 권한 검사는 Hive 쿼리 컴파일 중에 이루어지지만, 사용자가 dfs 명령, 사용자 정의 함수, 셸 명령을 실행할 수 있으므로 클라이언트 보안 검사를 우회할 수 있어요.

Hive는 또한 metastore 서버 API 호출에 권한 부여를 추가하는 데 흔히 사용되는 저장 기반 권한 부여를 지원해요 (Metastore Server의 저장 기반 권한 부여 참조). Hive 0.12.0부터 클라이언트 쪽에서도 사용할 수 있습니다. 악의적인 사용자의 변경으로부터 metastore를 보호할 수 있지만, 세밀한 접근 제어(컬럼 또는 행 수준)는 지원하지 않아요.

Hive의 기본 권한 부여 모델은 기본 테이블 대신 뷰를 만들고 뷰에 접근 권한을 부여함으로써 세밀한 접근 제어를 제공하는 데 사용할 수 있어요.

출처: 문서

본문

SQL 표준 기반 Hive 권한 부여 (Hive 0.13 신규)

SQL 표준 기반 권한 부여 옵션(Hive 0.13에서 도입)은 Hive에서 세 번째 권한 부여 옵션을 제공해요. 이것은 Hive가 기존 사용자에게 하위 호환성 문제를 일으키지 않으면서 권한 부여 모델에서 완전히 SQL 표준을 따를 수 있게 해 주므로 권장됩니다. 사용자들이 이 더 안전한 모델로 이주함에 따라, 현재의 기본 권한 부여는 폐기될 수 있어요.

이 권한 부여 옵션에 대한 개요는 HiveServer2의 SQL 표준 기반 권한 부여를 참고하세요.

이 권한 부여 모드는 metastore 서버의 저장 기반 권한 부여와 함께 사용할 수 있어요. Hive의 현재 기본 권한 부여와 마찬가지로, 이것도 쿼리 컴파일 시점에 적용됩니다. 이 옵션을 통해 보안을 제공하려면 클라이언트를 보호해야 해요. 사용자가 HiveServer2를 통해서만 접근하도록 허용하고, 실행할 수 있는 사용자 코드와 비-SQL 명령을 제한함으로써 이를 달성할 수 있습니다. 검사는 요청을 제출한 사용자를 기준으로 이루어지지만, 쿼리는 Hive 서버 사용자로 실행됩니다. 입력 데이터의 디렉터리와 파일은 이 Hive 서버 사용자에게 읽기 접근 권한이 있어야 해요. 악의적인 사용자로부터 보호할 필요가 없는 사용자에게는 Hive 커맨드 라인을 통해서도 지원될 수 있어요.

이 작업의 목표는 가능한 한 SQL 표준을 준수하는 것이지만, 구현에는 표준과의 차이가 있어요. 일부 차이는 기존 Hive 사용자가 이 권한 부여 모델로 쉽게 이주하도록 만들기 위해, 일부는 사용 편의성을 고려해 만들어졌습니다(이런 경우 널리 쓰이는 많은 데이터베이스가 무엇을 하는지도 살펴봤어요).

이 권한 부여 모델에서 Hive CLI, HDFS 명령, Pig 커맨드 라인, hadoop jar 명령 등에 접근할 수 있는 사용자는 **특권 사용자(privileged users)**로 간주돼요. 조직에서 보통 ETL 워크로드를 담당하는 팀만 그런 접근이 필요해요. 이런 도구는 HiveServer2를 통해 데이터에 접근하지 않으므로, 그들의 접근은 이 모델로 권한 부여되지 않습니다. Hive CLI, Pig, MapReduce 사용자의 Hive 테이블 접근은 metastore 서버에서 활성화된 저장 기반 권한 부여로 제어할 수 있어요.

비즈니스 분석가 같은 대부분의 사용자는 HiveServer2를 통해 SQL과 ODBC/JDBC를 사용하는 경향이 있고, 그들의 접근은 이 권한 부여 모델로 제어할 수 있습니다.

Hive 명령·문장에 대한 제한 (Restrictions on Hive Commands and Statements)

이 권한 부여가 활성화되면 dfs, add, delete, compile, reset 같은 명령이 비활성화돼요.

Hive 구성을 변경하는 데 사용하는 set 명령은 더 작은 안전한 집합으로 제한됩니다. 이것은 hive.security.authorization.sqlstd.confwhitelist 구성 파라미터로 제어됩니다. 이 집합을 사용자 정의해야 한다면, HiveServer2 관리자가 hive-site.xml에서 이 구성 파라미터에 값을 설정할 수 있어요.

함수와 매크로를 추가하거나 제거할 권한은 admin 역할로 제한됩니다.

사용자가 함수를 사용할 수 있게 하기 위해, 영구 함수를 생성하는 기능이 추가되었어요. admin 역할의 사용자가 이 함수들을 생성하는 명령을 실행할 수 있고, 모든 사용자가 사용할 수 있습니다.

이 권한 부여가 활성화되면 Hive transform 절도 비활성화됩니다.

권한 (Privileges)

  • SELECT 권한 – 객체에 대한 읽기 접근을 제공해요.
  • INSERT 권한 – 객체(테이블)에 데이터를 추가할 수 있게 해 줘요.
  • UPDATE 권한 – 객체(테이블)에 대해 업데이트 쿼리를 실행할 수 있게 해 줘요.
  • DELETE 권한 – 객체(테이블)의 데이터를 삭제할 수 있게 해 줘요.
  • ALL PRIVILEGES – 모든 권한을 제공해요 (위의 모든 권한으로 변환됩니다).

객체 (Objects)

  • 권한은 테이블과 뷰에 적용돼요. 위 권한은 데이터베이스에 대해서는 지원되지 않습니다.
  • 데이터베이스 소유권(ownership)은 특정 작업에 대해 고려됩니다.
  • URI는 Hive가 SQL 구문에서 URI 사용을 허용하므로 Hive의 또 다른 객체예요. 위 권한은 URI 객체에는 적용되지 않습니다. 사용된 URI는 파일 시스템의 파일/디렉터리를 가리킬 것으로 예상됩니다. 권한 부여는 사용자가 그 파일/디렉터리에 대해 가진 권한을 기반으로 이루어져요.

객체 소유권 (Object Ownership)

특정 작업의 경우, 객체(테이블/뷰/데이터베이스)의 소유권이 그 작업을 수행할 권한이 있는지를 결정해요.

테이블, 뷰, 데이터베이스를 만든 사용자가 그 소유자가 됩니다. 테이블과 뷰의 경우, 소유자는 grant 옵션이 포함된 모든 권한을 얻어요.

역할(role)도 데이터베이스의 소유자가 될 수 있어요. alter database 명령으로 데이터베이스 소유자를 역할로 설정할 수 있습니다.

사용자와 역할 (Users and Roles)

권한은 사용자와 역할 모두에 부여될 수 있어요. 사용자는 하나 이상의 역할에 속할 수 있습니다.

특별한 의미를 가진 두 개의 역할이 있어요 – publicadmin. 모든 사용자는 public 역할에 속합니다. grant 문에서 이 역할을 사용해 모든 사용자에게 권한을 부여할 수 있어요.

사용자가 Hive 쿼리나 명령을 실행할 때, 사용자와 그녀의 "current roles"에 부여된 권한이 확인됩니다. current roles는 "show current roles;" 명령으로 볼 수 있어요. 기본적으로 admin 역할을 제외한 사용자의 모든 역할이 current roles에 있으며, "set role" 명령으로 특정 역할을 current role로 설정할 수 있어요. 명령 설명을 참고하세요.

데이터베이스 관리자의 일을 하는 사용자는 admin 역할에 추가될 것으로 기대됩니다. 그들은 "create role", "drop role" 같은 추가 명령을 실행할 권한이 있어요. 또한 명시적으로 접근 권한을 부여받지 않은 객체에도 접근할 수 있습니다. 단, admin 역할에 속한 사용자는 이 역할이 기본적으로 current roles에 없으므로, admin 역할의 권한을 얻기 전에 "set role" 명령을 실행해야 해요.

사용자와 역할의 이름 (Names of Users and Roles)

역할 이름은 대소문자를 구분하지 않아요. 즉 "marketing"과 "MarkEting"은 같은 역할을 가리킵니다.

사용자 이름은 대소문자를 구분합니다. 역할 이름과 달리 사용자 이름은 Hive 안에서 관리되지 않기 때문이에요. 사용자는 hiveserver2 인증 모드가 지원하는 어떤 사용자든 될 수 있습니다.

인용 식별자 (Quoted Identifiers)

구성 파라미터 hive.support.quoted.identifierscolumn(기본값)으로 설정되면 사용자·역할 이름은 선택적으로 백틱 문자()로 감쌀 수 있어요. 인용 식별자에는 모든 Unicode 문자가 허용되며, 이중 백틱(``)이 백틱 문자를 나타냅니다. 하지만 hive.support.quoted.identifiersnone`으로 설정되면 사용자·역할 이름에 영숫자와 밑줄 문자만 허용됩니다.

자세한 내용은 HIVE-6013과 컬럼 이름의 인용 식별자 지원을 참고하세요.

Hive 0.14부터는 hive.support.quoted.identifiers 설정과 무관하게 사용자를 백틱 문자(`)로 선택적으로 감쌀 수 있어요.

역할 관리 명령 (Role Management Commands)

Create Role

CREATE ROLE role_name;

새 역할을 만들어요. admin 역할만 이 권한이 있습니다.

역할 이름 ALL, DEFAULT, NONE은 예약되어 있어요.

Drop Role

DROP ROLE role_name;

주어진 역할을 제거해요. admin 역할만 이 권한이 있습니다.

Show Current Roles

SHOW CURRENT ROLES;

사용자의 current roles 목록을 보여줘요. 사용자의 모든 작업은 사용자와 사용자의 모든 current roles의 권한을 보고 권한 부여됩니다.

기본 current roles에는 admin 역할을 제외한 사용자의 모든 역할이 있습니다 (사용자가 admin 역할에도 속해 있는 경우에도 마찬가지).

아무 사용자나 이 명령을 실행할 수 있어요.

Set Role

SET ROLE (role_name|ALL|NONE);

role_name이 지정되면, 그 역할이 current roles의 유일한 역할이 됩니다.

role_name을 ALL로 설정하면 current roles 목록을 새로고침(사용자에게 새 역할이 부여된 경우)하고 기본 역할 목록으로 설정해요.

role_name을 NONE으로 설정하면 현재 사용자에서 모든 current roles를 제거합니다. (HIVE-11780에서 도입되었으며, 이후 버전 1.3.0과 1.2.2에 포함될 예정입니다.)

사용자가 속하지 않은 역할을 role_name으로 지정하면 오류가 발생해요.

Show Roles

SHOW ROLES;

현재 존재하는 모든 역할을 나열해요.

admin 역할만 이 권한이 있습니다.

Grant Role

GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ... 
[ WITH ADMIN OPTION ];

principal_specification
  : USER user
  | ROLE role

하나 이상의 역할을 다른 역할이나 사용자에게 부여해요.

"WITH ADMIN OPTION"이 지정되면, 사용자는 역할을 다른 사용자/역할에게 부여할 권한을 얻습니다.

grant 문이 역할 간 순환 관계를 만들게 되면 명령은 오류와 함께 실패해요.

Revoke Role

REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;

principal_specification
  : USER user
  | ROLE role

FROM 절의 사용자/역할로부터 역할의 멤버십을 철회해요.

Hive 0.14.0부터 REVOKE ADMIN OPTION FOR <role>을 사용해 ADMIN OPTION만 철회하는 것이 가능해요 (HIVE-6252).

Show Role Grant

SHOW ROLE GRANT (USER|ROLE) principal_name;

여기서 principal_name은 사용자나 역할의 이름이에요.

주어진 사용자나 역할이 부여받은 모든 역할을 나열해요.

현재는 아무 사용자나 이 명령을 실행할 수 있어요. 하지만 이는 나중에 사용자들이 자신의 역할 부여만 볼 수 있도록 바뀔 가능성이 높으며, 다른 사용자의 역할 부여를 보려면 추가 권한이 필요할 것입니다.

Show Role Grant 예제
0: jdbc:hive2://localhost:10000> GRANT role1 TO USER user1;
No rows affected (0.058 seconds)

0: jdbc:hive2://localhost:10000> SHOW ROLE GRANT USER user1;
+---------+---------------+----------------+----------+
|  role   | grant_option  |   grant_time   | grantor  |
+---------+---------------+----------------+----------+
| public  | false         | 0              |          |
| role1   | false         | 1398284083000  | uadmin   |
+---------+---------------+----------------+----------+

Show Principals

SHOW PRINCIPALS role_name;

이 역할에 속한 모든 역할과 사용자를 나열해요.

admin 역할만 이 권한이 있습니다.

Show Principals 예제
0: jdbc:hive2://localhost:10000> SHOW PRINCIPALS role1;
+-----------------+-----------------+---------------+----------+---------------+----------------+
| principal_name  | principal_type  | grant_option  | grantor  | grantor_type  |   grant_time   |
+-----------------+-----------------+---------------+----------+---------------+----------------+
| role2           | ROLE            | false         | uadmin   | USER          | 1398285926000  |
| role3           | ROLE            | true          | uadmin   | USER          | 1398285946000  |
| user1           | USER            | false         | uadmin   | USER          | 1398285977000  |
+-----------------+-----------------+---------------+----------+---------------+----------------+

객체 권한 관리 (Managing Object Privileges)

객체 권한 명령 (Object Privilege Commands)

Grant

GRANT
    priv_type [, priv_type ] ...
    ON table_or_view_name
    TO principal_specification [, principal_specification] ...
    [WITH GRANT OPTION];

Revoke

REVOKE [GRANT OPTION FOR]
    priv_type [, priv_type ] ...
    ON table_or_view_name
    FROM principal_specification [, principal_specification] ... ;

principal_specification
  : USER user
  | ROLE role
 
priv_type
  : INSERT | SELECT | UPDATE | DELETE | ALL

사용자가 테이블이나 뷰에 대한 권한을 WITH GRANT OPTION으로 부여받았다면, 그 사용자는 해당 객체에 대한 다른 사용자·역할의 권한도 부여/철회할 수 있어요. Hive 0.14.0부터는 REVOKE GRANT OPTION FOR <privilege>를 사용해 권한은 유지하면서 grant 옵션만 제거할 수 있습니다 (HIVE-7404).

참고로 REVOKE 문의 경우 CASCADE의 DROP-BEHAVIOR 옵션은 (SQL 표준에 있음) 현재 지원되지 않아요. 결과적으로 revoke 문은 어떤 종속 권한도 제거하지 않습니다. CASCADE 동작에 대한 자세한 내용은 Postgres revoke 문서를 확인할 수 있어요.

예제:

0: jdbc:hive2://localhost:10000/default> grant select on table secured_table to role my_role;
No rows affected (0.046 seconds)

0: jdbc:hive2://localhost:10000/default> revoke update, select on table secured_table from role my_role;
No rows affected (0.028 seconds)

표준 SQL과 달리 Hive에서는 principal_specification에 USER 또는 ROLE을 반드시 지정해야 한다는 점을 주목하세요.

Show Grant

SHOW GRANT [principal_specification] ON (ALL | [TABLE] table_or_view_name);
 
principal_specification
  : USER user
  | ROLE role

현재는 아무 사용자나 이 명령을 실행할 수 있어요. 하지만 나중에 사용자들이 자신의 권한만 볼 수 있도록 바뀔 가능성이 높으며, 다른 사용자의 권한을 보려면 추가 권한이 필요할 것입니다.

객체 권한 관리 예제 (Examples of Managing Object Privileges)

사용자 ashutosh가 테이블 hivejiratable에 대해 가진 권한 찾기:

0: jdbc:hive2://localhost:10000> show grant user ashutosh on table hivejiratable;
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database  |     table      | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| default   | hivejiratable  |            |         | ashutosh        | USER            | DELETE     | false         | 1398303419000  | thejas   |
| default   | hivejiratable  |            |         | ashutosh        | USER            | SELECT     | false         | 1398303407000  | thejas   |
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+

사용자 ashutosh가 모든 객체에 대해 가진 권한 찾기:

0: jdbc:hive2://localhost:10000> show grant user ashutosh on all;                               
+-----------+-------------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database  |       table       | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+-------------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| default   | hivecontributors  |            |         | ashutosh        | USER            | DELETE     | false         | 1398303576000  | thejas   |
| default   | hivecontributors  |            |         | ashutosh        | USER            | INSERT     | false         | 1398303576000  | thejas   |
| default   | hivecontributors  |            |         | ashutosh        | USER            | SELECT     | false         | 1398303576000  | thejas   |
| default   | hivejiratable     |            |         | ashutosh        | USER            | DELETE     | false         | 1398303419000  | thejas   |
| default   | hivejiratable     |            |         | ashutosh        | USER            | SELECT     | false         | 1398303407000  | thejas   |
+-----------+-------------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+

모든 사용자가 테이블 hivejiratable에 대해 가진 권한 찾기:

0: jdbc:hive2://localhost:10000> show grant on table hivejiratable;
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database  |     table      | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| default   | hivejiratable  |            |         | ashutosh        | USER            | DELETE     | false         | 1398303419000  | thejas   |
| default   | hivejiratable  |            |         | ashutosh        | USER            | SELECT     | false         | 1398303407000  | thejas   |
| default   | hivejiratable  |            |         | navis           | USER            | INSERT     | false         | 1398303650000  | thejas   |
| default   | hivejiratable  |            |         | navis           | USER            | SELECT     | false         | 1398303650000  | thejas   |
| default   | hivejiratable  |            |         | public          | ROLE            | SELECT     | false         | 1398303481000  | thejas   |
| default   | hivejiratable  |            |         | thejas          | USER            | DELETE     | true          | 1398303380000  | thejas   |
| default   | hivejiratable  |            |         | thejas          | USER            | INSERT     | true          | 1398303380000  | thejas   |
| default   | hivejiratable  |            |         | thejas          | USER            | SELECT     | true          | 1398303380000  | thejas   |
| default   | hivejiratable  |            |         | thejas          | USER            | UPDATE     | true          | 1398303380000  | thejas   |
+-----------+----------------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+

Hive 연산에 필요한 권한 (Privileges Required for Hive Operations)

코드 (Codes)

Y: 권한이 필요함. / Y + G: "WITH GRANT OPTION" 권한이 필요함.

Action Select Insert Update Delete Ownership Admin URI Privilege (RWX Permission + Ownership)
CREATE TABLE Y (of database) Y (for create external table – the location)
DROP TABLE Y
DESCRIBE TABLE Y
SHOW PARTITIONS Y
ALTER TABLE LOCATION Y Y (for new location)
ALTER PARTITION LOCATION Y Y (for new partition location)
ALTER TABLE ADD PARTITION Y Y (for partition location)
ALTER TABLE DROP PARTITION Y
ALTER TABLE (위에 없는 것들) Y
TRUNCATE TABLE Y
CREATE VIEW Y + G
ALTER VIEW PROPERTIES Y
ALTER VIEW RENAME Y
DROP VIEW PROPERTIES Y
DROP VIEW Y
ANALYZE TABLE Y Y
SHOW COLUMNS Y
SHOW TABLE STATUS Y
SHOW TABLE PROPERTIES Y
CREATE TABLE AS SELECT Y (of input) Y (of database)
CREATE INDEX Y (of table)
DROP INDEX Y
ALTER INDEX REBUILD Y
ALTER INDEX PROPERTIES Y
SELECT Y
INSERT Y Y (for OVERWRITE)
UPDATE Y
DELETE Y
LOAD Y (output) Y (output) Y (input location)
SHOW CREATE TABLE Y+G
CREATE FUNCTION Y
DROP FUNCTION Y
CREATE MACRO Y
DROP MACRO Y
MSCK (metastore check) Y
ALTER DATABASE Y
CREATE DATABASE Y (if custom location specified)
EXPLAIN Y
DROP DATABASE Y

버전 정보 (Version Information)

Hive 3.0.0(HIVE-12408)부터 URI 권한에 대해 소유권(Ownership)이 필요하지 않아요.

구성 (Configuration)

Hive 0.13.x용

hive-site.xml에 다음을 설정하세요:

  • hive.server2.enable.doAs를 false로.
  • hive.users.in.admin.role을 admin 역할에 추가할 쉼표로 구분된 사용자 목록으로. admin 역할에 속한 사용자는 이 역할이 기본적으로 current roles에 없으므로 admin 역할의 권한을 얻기 전에 "set role" 명령을 실행해야 한다는 점에 주의하세요.

다음 추가 커맨드 라인 옵션으로 HiveServer2를 시작하세요:

  • -hiveconf hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory
  • -hiveconf hive.security.authorization.enabled=true
  • -hiveconf hive.security.authenticator.manager=org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
  • -hiveconf hive.metastore.uris=' '

Hive 0.14 이상용

hive-site.xml에 다음을 설정하세요:

  • hive.server2.enable.doAs를 false로.
  • hive.users.in.admin.roleadmin 역할에 추가할 쉼표로 구분된 사용자 목록으로. admin 역할에 속한 사용자는 이 역할이 기본적으로 current roles에 없으므로 admin 역할의 권한을 얻기 전에 "set role" 명령을 실행해야 한다는 점에 주의하세요.
  • hive.security.metastore.authorization.managerorg.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly를 추가하세요. (쉼표로 구분된 목록을 받으므로, 원한다면 저장 기반 권한 부여 파라미터와 함께 추가할 수 있어요.) 이 설정은 원격 metastore에서 인가 API 호출이 호출되지 않도록 금지합니다. HiveServer2는 임베디드 metastore를 사용하도록 구성할 수 있고, 그러면 metastore 인가 API를 호출할 수 있어요. Hive CLI와 다른 원격 metastore 사용자들은 인가 API를 호출하려 하면 거부됩니다. 이는 인가 API를 특권 있는 HiveServer2 프로세스로 제한합니다. 또한 metastore rdbms 접근을 metastore 서버와 hiveserver2로 제한해야 합니다.
  • hive.security.authorization.managerorg.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory로. 이렇게 하면 hive-cli로 만든 테이블이나 뷰에 기본 권한이 owner에게 부여되도록 보장합니다.

hiveserver2-site.xml에 다음을 설정하세요:

  • hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory
  • hive.security.authorization.enabled=true
  • hive.security.authenticator.manager=org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
  • hive.metastore.uris=' '

알려진 이슈 (Known Issues)

Hive 0.13

  • HIVE-6985 – SQL std auth - public 역할에 부여된 권한이 존중되지 않는 문제
  • HIVE-6919 – Hive sql std auth가 파티션된 테이블에서 select 쿼리 실패
  • HIVE-6921 – SQL std auth가 켜진 상태에서 인덱스 생성 실패
  • HIVE-6957 – SQL 인가가 HS2 바이너리 모드와 Kerberos 인증에서 동작하지 않음
  • attachments/40509928/42696874-txt – Export/Import 문이 인가되지 않음

Hive 0.13.1

위 Hive 0.13.0에서 언급된 알려진 이슈는 0.13.1 릴리스에서 수정되었어요.

참고 (References)

SQL 표준 보안 정보는 다음을 참고하세요.

  • ISO 9075 Part 1 Framework sections 4.2.6 (Roles), 4.6.11 (Privileges)
  • ISO 9075 Part 2 Foundation sections 4.35 (Basic security model) and 12 (Access control)

문제 해결 (Troubleshooting)

문제: 내 사용자 이름이 hive-site.xml의 hive.users.in.admin.role에 있는데, 여전히 사용자가 admin이 아니라는 오류가 발생해요. 무엇이 문제일까요?

해결: 구성 변경 후 HiveServer2를 재시작했는지, 그리고 위 구성에서 설명한 대로 HiveServer2 커맨드 라인 옵션을 사용했는지 확인하세요.

해결: admin 역할을 얻기 위해 'set role admin;' 명령을 실행했는지 확인하세요.

더 알아보기 (Learn more)

SQL 표준 기반 권한 부여는 HiveServer2 사용자에게 컬럼·행 수준까지 가능한 세밀한 접근 제어를 제공하는 권장 모델이에요. GRANT/REVOKE, 역할(role) 관리, WITH GRANT OPTION 등을 SQL 표준에 가깝게 지원하며, Hive CLI·HDFS 직접 접근자는 특권 사용자로 간주되어 별도 관리가 필요합니다.