@@ -142,7 +142,7 @@ use the following setting:
142142}
143143```
144144
145- ## 5. Create a user for the connector
145+ ## 5. Create a user for the connector {#create-dbz-user}
146146
147147The Debezium Oracle connector must run as an Oracle LogMiner user with
148148specific permissions. The following example shows some SQL that creates
@@ -166,39 +166,128 @@ CREATE USER c##dbzuser IDENTIFIED BY dbz
166166 QUOTA UNLIMITED ON logminer_tbs
167167 CONTAINER= ALL;
168168
169- GRANT CREATE SESSION TO c# #dbzuser CONTAINER=ALL;
170- GRANT SET CONTAINER TO c# #dbzuser CONTAINER=ALL;
171- GRANT SELECT ON V_$DATABASE to c# #dbzuser CONTAINER=ALL;
172- GRANT FLASHBACK ANY TABLE TO c# #dbzuser CONTAINER=ALL;
173- GRANT SELECT ANY TABLE TO c# #dbzuser CONTAINER=ALL;
174- GRANT SELECT_CATALOG_ROLE TO c# #dbzuser CONTAINER=ALL;
175- GRANT EXECUTE_CATALOG_ROLE TO c# #dbzuser CONTAINER=ALL;
176- GRANT SELECT ANY TRANSACTION TO c# #dbzuser CONTAINER=ALL;
177- GRANT LOGMINING TO c# #dbzuser CONTAINER=ALL;
178-
179- GRANT CREATE TABLE TO c# #dbzuser CONTAINER=ALL;
180- GRANT LOCK ANY TABLE TO c# #dbzuser CONTAINER=ALL;
181- GRANT CREATE SEQUENCE TO c# #dbzuser CONTAINER=ALL;
182-
183- GRANT EXECUTE ON DBMS_LOGMNR TO c# #dbzuser CONTAINER=ALL;
184- GRANT EXECUTE ON DBMS_LOGMNR_D TO c# #dbzuser CONTAINER=ALL;
185-
186- GRANT SELECT ON V_$LOG TO c# #dbzuser CONTAINER=ALL;
187- GRANT SELECT ON V_$LOG_HISTORY TO c# #dbzuser CONTAINER=ALL;
188- GRANT SELECT ON V_$LOGMNR_LOGS TO c# #dbzuser CONTAINER=ALL;
189- GRANT SELECT ON V_$LOGMNR_CONTENTS TO c# #dbzuser CONTAINER=ALL;
190- GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c# #dbzuser CONTAINER=ALL;
191- GRANT SELECT ON V_$LOGFILE TO c# #dbzuser CONTAINER=ALL;
192- GRANT SELECT ON V_$ARCHIVED_LOG TO c# #dbzuser CONTAINER=ALL;
193- GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c# #dbzuser CONTAINER=ALL;
194- GRANT SELECT ON V_$TRANSACTION TO c# #dbzuser CONTAINER=ALL;
195-
196- GRANT SELECT ON V_$MYSTAT TO c# #dbzuser CONTAINER=ALL;
197- GRANT SELECT ON V_$STATNAME TO c# #dbzuser CONTAINER=ALL;
169+ GRANT CREATE SESSION TO c# #dbzuser CONTAINER=ALL;
170+ GRANT SET CONTAINER TO c# #dbzuser CONTAINER=ALL;
171+ GRANT SELECT ON V_$DATABASE to c# #dbzuser CONTAINER=ALL;
172+
173+ -- See `Limiting privileges` below if the privileges
174+ -- granted by these two commands raise security concerns.
175+ GRANT FLASHBACK ANY TABLE TO c# #dbzuser CONTAINER=ALL;
176+ GRANT SELECT ANY TABLE TO c# #dbzuser CONTAINER=ALL;
177+ --
178+
179+ GRANT SELECT_CATALOG_ROLE TO c# #dbzuser CONTAINER=ALL;
180+ GRANT EXECUTE_CATALOG_ROLE TO c# #dbzuser CONTAINER=ALL;
181+ GRANT SELECT ANY TRANSACTION TO c# #dbzuser CONTAINER=ALL;
182+ GRANT LOGMINING TO c# #dbzuser CONTAINER=ALL;
183+
184+ -- See `Limiting privileges` below if the privileges
185+ -- granted by these two commands raise security concerns.
186+ GRANT CREATE TABLE TO c# #dbzuser CONTAINER=ALL;
187+ GRANT LOCK ANY TABLE TO c# #dbzuser CONTAINER=ALL;
188+ --
189+
190+ GRANT CREATE SEQUENCE TO c# #dbzuser CONTAINER=ALL;
191+
192+ GRANT EXECUTE ON DBMS_LOGMNR TO c# #dbzuser CONTAINER=ALL;
193+ GRANT EXECUTE ON DBMS_LOGMNR_D TO c# #dbzuser CONTAINER=ALL;
194+
195+ GRANT SELECT ON V_$LOG TO c# #dbzuser CONTAINER=ALL;
196+ GRANT SELECT ON V_$LOG_HISTORY TO c# #dbzuser CONTAINER=ALL;
197+ GRANT SELECT ON V_$LOGMNR_LOGS TO c# #dbzuser CONTAINER=ALL;
198+ GRANT SELECT ON V_$LOGMNR_CONTENTS TO c# #dbzuser CONTAINER=ALL;
199+ GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c# #dbzuser CONTAINER=ALL;
200+ GRANT SELECT ON V_$LOGFILE TO c# #dbzuser CONTAINER=ALL;
201+ GRANT SELECT ON V_$ARCHIVED_LOG TO c# #dbzuser CONTAINER=ALL;
202+ GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c# #dbzuser CONTAINER=ALL;
203+ GRANT SELECT ON V_$TRANSACTION TO c# #dbzuser CONTAINER=ALL;
204+
205+ GRANT SELECT ON V_$MYSTAT TO c# #dbzuser CONTAINER=ALL;
206+ GRANT SELECT ON V_$STATNAME TO c# #dbzuser CONTAINER=ALL;
198207
199208exit;
200209```
201210
211+ ### Limiting privileges
212+
213+ The privileges granted in the example above are convenient,
214+ but you may prefer to restrict them further to improve security. In particular,
215+ you might want to prevent the Debezium user from creating tables, or
216+ selecting or locking any table.
217+
218+ The Debezium user needs the ` CREATE TABLE ` privilege to create the
219+ ` LOG_MINING_FLUSH ` table when it connects for the first
220+ time. After this point, it doesn't need to create any more tables,
221+ so you can safely revoke this privilege with the following command:
222+
223+ ``` sql
224+ REVOKE CREATE TABLE FROM c# #dbzuser container=all;
225+ ```
226+
227+ [ The example above] ( #create-dbz-user ) grants the ` SELECT ANY TABLE ` and
228+ ` FLASHBACK ANY TABLE ` privileges for convenience, but only the tables synced to RDI
229+ and the ` V_$XXX ` tables strictly need these privileges.
230+ You can replace the ` GRANT SELECT ANY TABLE ` command with explicit
231+ commands for each table. For example, you would use commands like the
232+ following for the tables in our sample
233+ [ ` chinook ` ] ( https://github.com/Redislabs-Solution-Architects/rdi-quickstart-postgres )
234+ database. (Note that Oracle 19c requires you to run a separate ` GRANT `
235+ command for each table individually.)
236+
237+ ``` sql
238+ GRANT SELECT ON chinook .album TO c# #dbzuser;
239+ GRANT SELECT ON chinook .artist TO c# #dbzuser;
240+ GRANT SELECT ON chinook .customer TO c# #dbzuser;
241+ ...
242+ ```
243+
244+ Similarly, instead of ` GRANT FLASHBACK ANY TABLE ` , you would use the following
245+ commands:
246+
247+ ``` sql
248+ GRANT FLASHBACK ON chinook .album TO c# #dbzuser;
249+ GRANT FLASHBACK ON chinook .artist TO c# #dbzuser;
250+ GRANT FLASHBACK ON chinook .customer TO c# #dbzuser;
251+ ...
252+ ```
253+
254+ The ` LOCK ` privilege is automatically granted by the ` SELECT `
255+ privilege, so you can omit this command if you have granted ` SELECT `
256+ on specific tables.
257+
258+ ### Revoking existing privileges
259+
260+ If you initially set the Debezium user's privileges on all tables,
261+ but you now want to restrict them, you can revoke the existing
262+ privileges before resetting them as described in the
263+ [ Limiting privileges] ( #limiting-privileges ) section.
264+
265+ Use the following commands to revoke and reset the ` SELECT ` privileges:
266+
267+ ``` sql
268+ REVOKE SELECT ANY TABLE FROM c# #dbzuser container=all;
269+ ALTER SESSION SET container= orclpdb1;
270+
271+ GRANT SELECT ON chinook .album TO c# #dbzuser;
272+ -- ...etc
273+ ```
274+
275+ The equivalent commands for ` FLASHBACK ` are:
276+
277+ ``` sql
278+ REVOKE FLASHBACK ANY TABLE FROM c# #dbzuser container=all;
279+ ALTER SESSION SET container= orclpdb1;
280+ GRANT FLASHBACK ON chinook .album TO c# #dbzuser;
281+ ```
282+
283+ The ` SELECT ` privilege automatically includes the ` LOCK `
284+ privilege, so when you grant ` SELECT ` for specific tables
285+ you should also revoke ` LOCK ` on all tables:
286+
287+ ``` sql
288+ REVOKE LOCK ANY TABLE FROM c# #dbzuser container=all;
289+ ```
290+
202291## 6. Configuration is complete
203292
204293Once you have followed the steps above, your Oracle database is ready
0 commit comments