インポートに必要な権限

(8.0.28)

結論:

・対象テーブルのdrop権限
・対象テーブルのcreate権限
・対象テーブルのalter権限
・対象テーブルのinsert権限
・対象テーブルのselect権限
・対象データベースのlock tables権限

-- 動作確認

drop user 'user1'@'%';
create user 'user1'@'%' identified by 'user1';


grant drop on test.tab1 to 'user1'@'%';
grant create on test.tab1 to 'user1'@'%';
grant lock tables on test.* to 'user1'@'%';
grant insert on test.tab1 to 'user1'@'%';
grant select on test.tab1 to 'user1'@'%';
grant alter on test.tab1 to 'user1'@'%';


mysql -u user1 -h localhost -p test
source tab1.sql

 

(19c)

-- ①自スキーマのデータをインポート


前提: 
インポート実行ユーザ → user1
インポート対象データ → user1


結論:

・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・CREATE TABLE システム権限
ディレクトリオブジェクトへの読み書き権限


-- 動作確認

CONNECT SYS@pdb1 AS SYSDBA

drop user user1 cascade;
create user user1 identified by user1;
grant create session to user1;
grant unlimited tablespace to user1;
grant create table to user1;
grant read,write on directory ORA_DIR to user1;

!impdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1


-- ②別スキーマのデータをインポート

前提: 
インポート実行ユーザ → user2
インポート対象データ → user1


結論:

・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_IMP_FULL_DATABASE ロール
ディレクトリオブジェクトへの読み書き権限

※DATAPUMP_IMP_FULL_DATABASE は IMP_FULL_DATABASE に下記6件を追加したもの
BACKUP ANY TABLE
CREATE TABLE
EXEMPT REDACTION POLICY
FLASHBACK ANY TABLE
READ ANY FILE GROUP
SELECT ANY SEQUENCE


-- 動作確認

CONNECT SYS@pdb1 AS SYSDBA

drop user user1 cascade;
drop user user2 cascade;
create user user1 identified by user1;
create user user2 identified by user2;
grant create session to user1;
grant create session to user2;

grant unlimited tablespace to user1;
grant create table to user1;

grant unlimited tablespace to user2;
grant DATAPUMP_IMP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;


!impdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1

 

-- ③自スキーマのデータをインポート (DV環境)

前提:
インポート実行ユーザ → user1
インポート対象データ → user1
DV保護スキーマ → user1
レルム所有者 → user1

結論:

・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・CREATE TABLE システム権限
ディレクトリオブジェクトへの読み書き権限
DBMS_MACADM.AUTHORIZE_DATAPUMP_USERで設定するDVでのインポート権限  (★ 12c非CDB の場合はレルム外のユーザの場合にだけ必要)


-- 動作確認

conn dbv_acctmgr/oracle@pdb1

drop user user1 cascade;
create user user1 identified by user1;
grant create session to user1;

conn dbv_owner/oracle@pdb1

select * from DVSYS.DBA_DV_REALM where NAME='realm1';
select * from DVSYS.DBA_DV_REALM_OBJECT where REALM_NAME='realm1';
select * from DVSYS.DBA_DV_REALM_AUTH where REALM_NAME='realm1';

BEGIN
 DBMS_MACADM.DELETE_REALM(
  realm_name    => 'realm1');
END; 
/

BEGIN
 DBMS_MACADM.CREATE_REALM(
  realm_name    => 'realm1', 
  description   => 'realm1', 
  enabled       => DBMS_MACUTL.G_YES, 
  audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL + DBMS_MACUTL.G_REALM_AUDIT_SUCCESS,
  realm_type    => 1);
END; 
/

BEGIN
 DBMS_MACADM.ADD_OBJECT_TO_REALM(
  realm_name   => 'realm1', 
  object_owner => 'user1', 
  object_name  => '%', 
  object_type  => '%'); 
END;
/

BEGIN
 DBMS_MACADM.ADD_AUTH_TO_REALM(
  realm_name    => 'realm1', 
  grantee       => 'user1', 
  auth_options  => DBMS_MACUTL.G_REALM_AUTH_OWNER);
END;
/

select * from DVSYS.DBA_DV_DATAPUMP_AUTH;
EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('user1', 'user1');
EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('user1', 'user1');

 

CONNECT SYS@pdb1 AS SYSDBA

grant unlimited tablespace to user1;
grant create table to user1;
grant read,write on directory ORA_DIR to user1;


!impdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1

 

-- ④別スキーマのデータをインポート (DV環境)

前提: 
インポート実行ユーザ → user2
インポート対象データ → user1
DV保護スキーマ → user1
レルム所有者 → user1
レルム参加者 → user2

結論:

・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_IMP_FULL_DATABASE ロール
ディレクトリオブジェクトへの読み書き権限
DBMS_MACADM.AUTHORIZE_DATAPUMP_USERで設定するDVでのインポート権限

※DATAPUMP_IMP_FULL_DATABASE は IMP_FULL_DATABASE に下記6件を追加したもの
BACKUP ANY TABLE
CREATE TABLE
EXEMPT REDACTION POLICY
FLASHBACK ANY TABLE
READ ANY FILE GROUP
SELECT ANY SEQUENCE


-- 動作確認

conn dbv_acctmgr/oracle@pdb1

drop user user1 cascade;
drop user user2 cascade;
create user user1 identified by user1;
create user user2 identified by user2;
grant create session to user1;
grant create session to user2;


conn dbv_owner/oracle@pdb1

select * from DVSYS.DBA_DV_REALM where NAME='realm1';
select * from DVSYS.DBA_DV_REALM_OBJECT where REALM_NAME='realm1';
select * from DVSYS.DBA_DV_REALM_AUTH where REALM_NAME='realm1';

BEGIN
 DBMS_MACADM.DELETE_REALM(
  realm_name    => 'realm1');
END; 
/

BEGIN
 DBMS_MACADM.CREATE_REALM(
  realm_name    => 'realm1', 
  description   => 'realm1', 
  enabled       => DBMS_MACUTL.G_YES, 
  audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL + DBMS_MACUTL.G_REALM_AUDIT_SUCCESS,
  realm_type    => 1);
END; 
/

BEGIN
 DBMS_MACADM.ADD_OBJECT_TO_REALM(
  realm_name   => 'realm1', 
  object_owner => 'user1', 
  object_name  => '%', 
  object_type  => '%'); 
END;
/

BEGIN
 DBMS_MACADM.ADD_AUTH_TO_REALM(
  realm_name    => 'realm1', 
  grantee       => 'user1', 
  auth_options  => DBMS_MACUTL.G_REALM_AUTH_OWNER);
END;
/

BEGIN
 DBMS_MACADM.ADD_AUTH_TO_REALM(
  realm_name    => 'realm1', 
  grantee       => 'user2', 
  auth_options  => DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT);
END;
/

select * from DVSYS.DBA_DV_DATAPUMP_AUTH;
EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('user2', 'user1');
EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('user2', 'user1');

 

CONNECT SYS@pdb1 AS SYSDBA

grant unlimited tablespace to user1;
grant create table to user1;

grant unlimited tablespace to user2;
grant DATAPUMP_IMP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;


!impdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1

 

 

 

(14)

 

-- ①テーブルオーナとインポート実行ユーザが同じ

前提: 
スキーマ名 → schema1
テーブルオーナ → user1
インポート実行ユーザ → user1


結論:
スキーマレベルのUSAGE権限
スキーマレベルのCREATE権限


-- 動作確認

\c test postgres mmm070
set search_path = 'schema1';

drop schema schema1 cascade;
drop owned by user1 cascade;
drop user user1;

create schema schema1;
create user user1 with login encrypted password 'user1';

grant create,usage on schema schema1 to user1;

\dn+
\du+

\c test user1 mmm070

set search_path = 'schema1';

\i tab1.sql

 

-- ②テーブルオーナとインポート実行ユーザが異なる

前提: 
スキーマ名 → schema1
テーブルオーナ → user1
インポート実行ユーザ → user2


結論:
インポート実行ユーザがテーブルオーナのロールに所属していること


-- 動作確認

\c test postgres mmm070

set search_path = 'schema1';

drop schema schema1 cascade;
drop owned by user1 cascade;
drop owned by user2 cascade;
drop user user1;
drop user user2;

create schema schema1;
create user user1 with login encrypted password 'user1';
create user user2 with login encrypted password 'user2';

grant create,usage on schema schema1 to user1;

grant  user1 to user2;

\dn+
\du+

\c test user2 mmm070

set search_path = 'schema1';

\i tab1.sql

 

(2019)

前提: 
スキーマ名 → dbo


結論:
・対象テーブルのinsert権限
・対象テーブルのselect権限

-- 動作確認


use test
go
drop user user1;
go
use master
go
drop login user1;
create login user1 with password='user1', default_database=test, check_policy=off
go
use test
go
create user user1 for login user1 with default_schema=dbo;
go

drop table tab1;
go
create table tab1(col1 int);
go


grant insert on dbo.tab1 to user1;
grant select on dbo.tab1 to user1;

go

 

bcp test.dbo.tab1 in "C:\tab1.txt" -U user1 -P user1 -c -t,