エクスポートに必要な権限

(8.0.28)

結論:

・対象テーブルのselect権限
・process権限
・対象データベースのlock tables権限

-- 動作確認

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

drop table tab1;
create table tab1(col1 int);
insert into tab1 values(1);
select * from tab1;

grant select on test.tab1 to 'user1'@'%';
grant process on *.* to 'user1'@'%';
grant lock tables on test.* to 'user1'@'%';

\! mysqldump -u user1 -h localhost -p  test tab1 > 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;


conn user1/user1@pdb1

create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;

 

!expdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes

 

 

-- ②別スキーマのデータをエクスポート 


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


結論:

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

※DATAPUMP_EXP_FULL_DATABASEとEXP_FULL_DATABASEは中身は同じ

-- 動作確認

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_EXP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;


conn user1/user1@pdb1

create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;


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

 

-- ③自スキーマのデータをエクスポート (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;

conn user1/user1@pdb1

create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;

 

!expdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes

 

 

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

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

結論:

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

※DATAPUMP_EXP_FULL_DATABASEとEXP_FULL_DATABASEは中身は同じ

-- 動作確認

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_EXP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;

 

conn user1/user1@pdb1

create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;


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

 

 

 

(14)

 

-- ①テーブルオーナとpg_dump実行ユーザが同じ

前提: 
スキーマ名 → schema1
テーブルオーナ → user1
pg_dump実行ユーザ → 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';

drop table schema1.tab1;
create table schema1.tab1(col1 int);
insert into schema1.tab1 values(1);
select * from schema1.tab1;


\! pg_dump -U user1 -h mmm070 -Fp    -t schema1.tab1 test > tab1.sql


-- ②テーブルオーナとpg_dump実行ユーザが異なる

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


結論:
スキーマレベルのUSAGE権限
テーブルレベルのSELECT権限


-- 動作確認

\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 usage on schema schema1 to user2;

\dn+
\du+

\c test user1 mmm070

set search_path = 'schema1';

drop table schema1.tab1;
create table schema1.tab1(col1 int);
insert into schema1.tab1 values(1);
select * from schema1.tab1;

grant select on schema1.tab1 to user2;


\! pg_dump -U user2 -h mmm070 -Fp    -t schema1.tab1 test > tab1.sql

 

 

(2019)

前提: 
スキーマ名 → dbo


結論:
・対象テーブルの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);
insert into tab1 values(1);
select * from tab1;
go

grant select on dbo.tab1 to user1;
go

 

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