When you want a user, probably a developer, to have access via Enterprise Manager to show query performance, but *ONLY* to specific databases and it’s performance stats, you need a ‘restricted’ EM and database user to do this. Next is tested on EM 13.3 and an 18c container database.
Short list of things that need to be done:
- Create a new Enterprise Manager Role with performance monitor privileges for specific targets
- Create new Enterprise Manager Administrators and add them to the previously create role
- Create a new common user in the target databases for monitoring within the target databases
- Create a new Enterprise Manager Named Credential for these targets
So that’s a short list, now the (written) instructions per step:
Create a new Enterprise Manager Role
From the main EM screen, go through these menus:
(Setup -> Security -> Roles)
- Click Create and give it a name and description
- No ‘EM_’ role selected
- Target Privileges: select no ‘applicable to all targets’ selected, but add all the DB targets the user needs access to, at the bottom of the screen; select “Database Instance” and/or “Pluggable Database” and/or “Cluster Database” for easy seraching
- Just above the populated list, click ‘Grant to All’ (or Grant to Selected), a new Target Privileges screen will open
- In the privilege selection, search for ‘performance’ and select ‘View Database Performance Home Page’, ‘View Database Performance Privilege Group’ and ‘View Database SQL Performance Analyzer’ (press Continue)
- The column ‘Manage Target Privilege Grants’ will show now the privileges (next)
- No ‘EM Resource Privileges’ selected
- You can select existing admins to get this role
Create a new Enterprise Manager Administrator
From the main EM screen, go through these menus:
(Setup -> Security -> Administrators)
- No Super Administrator selected
- Select and add the previously created monitoring role
- Select nothing else, it should all be included in the role
Create a new common user in the (container) database
Run the next statements on container level:
- SQL> create user c##diagnostic identified by “LetMeIn!” [container=all];
- SQL> grant create session, select_catalog_role to c## diagnostic [container=all];
Create a new Enterprise Manager Named Credential
This way, users do not have to know the password, as you save it as a named credential.
From the main EM screen, go through these menus:
(Setup -> Security -> Named Credential)
- Authenticating Target Type: Database Instance
- Credential Type: Database Credentials
- Scope: Global
- Username / Password: c##diagnostic / LetMeIn!
- Grant Access Control of this credential
- Add Grant View Credential (is default) to users now or later via ‘Manage Access’
Happy tuning!