dremiojs 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +14 -0
- package/.prettierrc +7 -0
- package/README.md +59 -0
- package/dremiodocs/dremio-cloud/cloud-api-reference.md +748 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-about.md +225 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-admin.md +3754 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-bring-data.md +6098 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-changelog.md +32 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-developer.md +1147 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-explore-analyze.md +2522 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-get-started.md +300 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-help-support.md +869 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-manage-govern.md +800 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-overview.md +36 -0
- package/dremiodocs/dremio-cloud/dremio-cloud-security.md +1844 -0
- package/dremiodocs/dremio-cloud/sql-docs.md +7180 -0
- package/dremiodocs/dremio-software/dremio-software-acceleration.md +1575 -0
- package/dremiodocs/dremio-software/dremio-software-admin.md +884 -0
- package/dremiodocs/dremio-software/dremio-software-client-applications.md +3277 -0
- package/dremiodocs/dremio-software/dremio-software-data-products.md +560 -0
- package/dremiodocs/dremio-software/dremio-software-data-sources.md +8701 -0
- package/dremiodocs/dremio-software/dremio-software-deploy-dremio.md +3446 -0
- package/dremiodocs/dremio-software/dremio-software-get-started.md +848 -0
- package/dremiodocs/dremio-software/dremio-software-monitoring.md +422 -0
- package/dremiodocs/dremio-software/dremio-software-reference.md +677 -0
- package/dremiodocs/dremio-software/dremio-software-security.md +2074 -0
- package/dremiodocs/dremio-software/dremio-software-v25-api.md +32637 -0
- package/dremiodocs/dremio-software/dremio-software-v26-api.md +36757 -0
- package/jest.config.js +10 -0
- package/package.json +25 -0
- package/src/api/catalog.ts +74 -0
- package/src/api/jobs.ts +105 -0
- package/src/api/reflection.ts +77 -0
- package/src/api/source.ts +61 -0
- package/src/api/user.ts +32 -0
- package/src/client/base.ts +66 -0
- package/src/client/cloud.ts +37 -0
- package/src/client/software.ts +73 -0
- package/src/index.ts +16 -0
- package/src/types/catalog.ts +31 -0
- package/src/types/config.ts +18 -0
- package/src/types/job.ts +18 -0
- package/src/types/reflection.ts +29 -0
- package/tests/integration_manual.ts +95 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,2074 @@
|
|
|
1
|
+
# Dremio Software - Security
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Source: https://docs.dremio.com/current/security/
|
|
8
|
+
|
|
9
|
+
Version: current [26.x]
|
|
10
|
+
|
|
11
|
+
# Security and Compliance Enterprise
|
|
12
|
+
|
|
13
|
+
Dremio offers extensive security measures to help protect the integrity of your data, such as access control and federation with external identity providers. Dremio provides flexible native security features and integration with a wide range of third-party tools so that your organization can adhere to compliance and regulatory standards, enforce fine-grained permissions for your users, and retain your existing tools for authentication and authorization.
|
|
14
|
+
|
|
15
|
+
* [Authentication](/current/security/authentication/) – Manage user identities, authentication, and enterprise identity providers.
|
|
16
|
+
* [Access Control](/current/security/rbac) – Grant fine-grained permissions at the user or role level using native Dremio features or an integrated external data security product.
|
|
17
|
+
* [Integrations](/current/security/integrations/) – Manage access control and data governance through third-party integrations.
|
|
18
|
+
* [Secrets Management](/current/security/secrets-management/) – Use a secrets management service to provide sensitive information like passwords and secret access keys instead of providing it in plaintext.
|
|
19
|
+
* [Audit Logging](/current/security/auditing/) – Ensure the integrity of your network using virtual network (VNet) configurations for outbound connections from Dremio executors.
|
|
20
|
+
* [Compliance](/current/security/compliance) – Review the current compliance measures and audits Dremio has undergone to ensure top-level security for your data.
|
|
21
|
+
|
|
22
|
+
As the [Dremio Shared Responsibility Models](/responsibility) outline, platform security is a shared responsibility between Dremio and you. The Shared Responsibility Models lay out Dremio's responsibilities for providing vulnerability management and application security and your responsibilities for deployment and operations.
|
|
23
|
+
|
|
24
|
+
To configure external services, read:
|
|
25
|
+
|
|
26
|
+
* [Integrate with Lake Formation](/current/security/integrations/lake-formation/)
|
|
27
|
+
* [Integrate with Privacera](/current/security/integrations/privacera/)
|
|
28
|
+
* [Apache Ranger Row-Level Filtering & Column-Masking](/current/security/integrations/row-column-policies-ranger/)
|
|
29
|
+
* [LDAP](/current/security/authentication/identity-providers/ldap)
|
|
30
|
+
|
|
31
|
+
Was this page helpful?
|
|
32
|
+
|
|
33
|
+
[Previous
|
|
34
|
+
|
|
35
|
+
Use Reflections in Nessie Source Branches](/current/acceleration/manual-reflections/using-nessie-branches-with-reflections)[Next
|
|
36
|
+
|
|
37
|
+
Authentication](/current/security/authentication/)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
# Source: https://docs.dremio.com/current/security/authentication/
|
|
42
|
+
|
|
43
|
+
Version: current [26.x]
|
|
44
|
+
|
|
45
|
+
On this page
|
|
46
|
+
|
|
47
|
+
# Authentication
|
|
48
|
+
|
|
49
|
+
Dremio supports several types of authentication for identity providers, client connections, and user types, including both regular users and service users.
|
|
50
|
+
|
|
51
|
+
## Authentication Methods by Application Type
|
|
52
|
+
|
|
53
|
+
| App Type | [Enterprise OIDC Provider](/current/security/authentication/identity-providers/#openid-connect-oidc-providers) | [LDAP](/current/security/authentication/identity-providers/#ldap-lightweight-directory-access-protocol) or Dremio Local Provider |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| **Dremio Console** | * Single Sign-On * Personal Access Token | * Username and Password * Personal Access Token |
|
|
56
|
+
| **User Clients & Applications** | * Personal Access Token * **OAuth-based authentication**: External JWT Exchange or External JWT with Legacy JDBC | * Personal Access Token * Username and Password with JDBC/ODBC |
|
|
57
|
+
| **M2M Applications** | * Service Users with External Service Principals | * OAuth Client Credentials * **Legacy Migration**: PAT Exchange or Obtaining OAuth Tokens with Username and Password |
|
|
58
|
+
|
|
59
|
+
## Dremio Console Authentication Methods
|
|
60
|
+
|
|
61
|
+
### Single Sign-On
|
|
62
|
+
|
|
63
|
+
The user is authenticated by the configured OIDC identity provider, including automatic authentication if the user is already signed in to the identity provider.
|
|
64
|
+
|
|
65
|
+
### Username and Password
|
|
66
|
+
|
|
67
|
+
The user provides a username and password combination for authentication. See [User Management](/current/security/user-management/) for information on adding and managing local and external users.
|
|
68
|
+
|
|
69
|
+
### Personal Access Token
|
|
70
|
+
|
|
71
|
+
A personal access token (PAT) is used in place of a user password. PATs provide a convenient way to create a client connection without exposing a user's password, but can pose a security risk if not properly managed. PATs can be configured with long lifetimes, and lost or compromised tokens may allow access to sensitive data until the token expires. Before use, the administrator must [activate PATs](/current/security/authentication/personal-access-tokens/) for the Dremio cluster.
|
|
72
|
+
|
|
73
|
+
To use a PAT, the user must follow these steps:
|
|
74
|
+
|
|
75
|
+
1. [Create a PAT](/current/security/authentication/personal-access-tokens/#creating-a-token) in the Dremio console. Users can create additional PATs using the Dremio console or the [PAT creation](/current/api-reference/dremio-rest-api/#tag/Personal-Access-Tokens) REST API.
|
|
76
|
+
2. Use the PAT to connect with the Dremio console, [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/).
|
|
77
|
+
|
|
78
|
+
## User Applications Authentication Methods
|
|
79
|
+
|
|
80
|
+
### External JWT
|
|
81
|
+
|
|
82
|
+
Client apps can request OAuth 2.0 JSON Web Tokens (JWTs) from external token providers, allowing users to authenticate through custom or third-party applications without exposing their credentials to the client application.
|
|
83
|
+
|
|
84
|
+
After obtaining an external JWT, the client app can create connections to Dremio using the [Legacy JDBC driver](/current/client-applications/drivers/jdbc/). However, Dremio recommends external JWT token exchange because Dremio OAuth access tokens are smaller and verification is faster.
|
|
85
|
+
|
|
86
|
+
To use an external JWT, the administrator must configure Dremio to use the Enterprise OIDC provider as an [external token provider](/current/security/authentication/application-authentication/external-token-providers/).
|
|
87
|
+
|
|
88
|
+
After configuration, a client application performs the following steps:
|
|
89
|
+
|
|
90
|
+
1. A user authenticates with the external token provider and the client [receives a JWT](/current/security/authentication/application-authentication/external-token-providers/#retrieving-an-external-jwt).
|
|
91
|
+
2. Create a connection to Dremio using the [Legacy JDBC](/current/client-applications/drivers/jdbc/) and the external JWT.
|
|
92
|
+
|
|
93
|
+
### External JWT Exchange
|
|
94
|
+
|
|
95
|
+
Exchanging the external JWT for an OAuth access token enables additional connection choices after authenticating with the external token provider. A client application performs the following steps:
|
|
96
|
+
|
|
97
|
+
1. A user authenticates with the external token provider and the client [receives a JWT](/current/security/authentication/application-authentication/external-token-providers/#retrieving-an-external-jwt).
|
|
98
|
+
2. Use the `/oauth/token` [REST API](/current/reference/api/oauth-token) to [exchange the JWT for an OAuth access token](/current/security/authentication/oauth-token-exchange/).
|
|
99
|
+
3. Create a connection to Dremio using [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/) and the OAuth access token.
|
|
100
|
+
|
|
101
|
+
## M2M Applications Authentication Methods
|
|
102
|
+
|
|
103
|
+
### OAuth Client Credentials
|
|
104
|
+
|
|
105
|
+
Service users authenticate using the OAuth 2.0 client credentials flow, where a client ID and client secret are exchanged for access tokens. This is the primary authentication method for service users and provides:
|
|
106
|
+
|
|
107
|
+
* **Automated authentication** without manual login processes
|
|
108
|
+
* **Short-lived access tokens** that enhance security
|
|
109
|
+
* **Centralized credential management** through the OAuth system
|
|
110
|
+
* **Audit trails** for programmatic access
|
|
111
|
+
|
|
112
|
+
To use OAuth client credentials:
|
|
113
|
+
|
|
114
|
+
1. Create a service user in the Dremio console under **Settings > User Management > Service Users**. Upon creation, Dremio generates a unique client ID and client secret.
|
|
115
|
+
2. Use the `/oauth/token` [REST API](/current/reference/api/oauth-token) to exchange the client ID and client secret for an OAuth access token.
|
|
116
|
+
3. Create a connection to Dremio using [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/) and the OAuth access token.
|
|
117
|
+
|
|
118
|
+
### External Service Principal Authentication
|
|
119
|
+
|
|
120
|
+
You can configure Dremio [service users](/current/security/authentication/users#user-types) to authenticate using service principals from Microsoft Entra ID or another OIDC provider. This allows service users to authenticate using JWTs from external identity providers, which are then exchanged for Dremio OAuth access tokens.
|
|
121
|
+
|
|
122
|
+
This method is useful for organizations that want to:
|
|
123
|
+
|
|
124
|
+
* Centralize service principal management in their identity provider
|
|
125
|
+
* Use existing Microsoft Entra ID service principals for Dremio access
|
|
126
|
+
* Maintain consistent authentication patterns across multiple systems
|
|
127
|
+
|
|
128
|
+
To use external service principal authentication:
|
|
129
|
+
|
|
130
|
+
1. Create a [service user](/current/security/authentication/users#user-types) in the Dremio console and configure external credentials linking to your service principal in Microsoft Entra ID or another OIDC provider.
|
|
131
|
+
2. The service user authenticates with the external identity provider and receives a JWT.
|
|
132
|
+
3. Use the `/oauth/token` [REST API](/current/reference/api/oauth-token) to exchange the external JWT for an OAuth access token.
|
|
133
|
+
4. Create a connection to Dremio using [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/) and the OAuth access token.
|
|
134
|
+
|
|
135
|
+
## Legacy Authentication Methods
|
|
136
|
+
|
|
137
|
+
### Obtain OAuth Access Tokens with Username and Password
|
|
138
|
+
|
|
139
|
+
Organizations transitioning to OAuth-based authentication can use a username and password from a traditional user account to obtain an OAuth access token. This method allows teams to implement OAuth-based authentication immediately while planning their migration to dedicated service users and any associated configuration of an external identity provider.
|
|
140
|
+
|
|
141
|
+
Users follow these steps to exchange a username and password:
|
|
142
|
+
|
|
143
|
+
1. Use the `/oauth/token` [REST API](/current/reference/api/oauth-token#obtain-tokens-via-username-and-password) to obtain OAuth access tokens using a username and password.
|
|
144
|
+
2. Create a connection to Dremio using [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/) and the OAuth access token.
|
|
145
|
+
3. Use the optional [refresh token to create OAuth access tokens](/current/reference/api/oauth-token#exchange-a-refresh-token) to obtain fresh OAuth access tokens as they expire.
|
|
146
|
+
|
|
147
|
+
### PAT Exchange
|
|
148
|
+
|
|
149
|
+
PAT Exchange serves as a migration bridge for existing applications that currently use PATs but need to integrate with systems expecting OAuth access tokens. This method allows organizations to maintain existing PAT-based workflows while transitioning to proper service user authentication.
|
|
150
|
+
|
|
151
|
+
Users follow these steps to exchange a PAT:
|
|
152
|
+
|
|
153
|
+
1. [Create a PAT](/current/security/authentication/personal-access-tokens/#creating-a-token) in the Dremio console or using the [REST API](/current/reference/api/personal-access-token) after creating the first token.
|
|
154
|
+
2. Use the `/oauth/token` [REST API](/current/reference/api/oauth-token#exchange-a-pat) to exchange the PAT for an OAuth access token.
|
|
155
|
+
3. Create a connection to Dremio using [Arrow Flight SQL JDBC](/current/client-applications/drivers/arrow-flight-sql-jdbc-driver/), [Arrow Flight SQL ODBC](/current/client-applications/drivers/arrow-flight-sql-odbc-driver/), [Legacy JDBC](/current/client-applications/drivers/jdbc/), or [Dremio REST](/current/api-reference/dremio-rest-api/) and the OAuth access token.
|
|
156
|
+
|
|
157
|
+
### Dremio Authentication Token
|
|
158
|
+
|
|
159
|
+
Dremio authentication tokens are generated from your Dremio username and password. This authentication method uses the prior generation `/apiv2/login` endpoint, now internal and subject to change without notice. See [Dremio Authentication Tokens](/current/security/authentication/dremio-authentication-tokens/) for additional information.
|
|
160
|
+
|
|
161
|
+
Was this page helpful?
|
|
162
|
+
|
|
163
|
+
[Previous
|
|
164
|
+
|
|
165
|
+
Security and Compliance](/current/security/)[Next
|
|
166
|
+
|
|
167
|
+
Manage Users](/current/security/authentication/users)
|
|
168
|
+
|
|
169
|
+
* Authentication Methods by Application Type
|
|
170
|
+
* Dremio Console Authentication Methods
|
|
171
|
+
+ Single Sign-On
|
|
172
|
+
+ Username and Password
|
|
173
|
+
+ Personal Access Token
|
|
174
|
+
* User Applications Authentication Methods
|
|
175
|
+
+ External JWT
|
|
176
|
+
+ External JWT Exchange
|
|
177
|
+
* M2M Applications Authentication Methods
|
|
178
|
+
+ OAuth Client Credentials
|
|
179
|
+
+ External Service Principal Authentication
|
|
180
|
+
* Legacy Authentication Methods
|
|
181
|
+
+ Obtain OAuth Access Tokens with Username and Password
|
|
182
|
+
+ PAT Exchange
|
|
183
|
+
+ Dremio Authentication Token
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
# Source: https://docs.dremio.com/current/security/rbac/
|
|
188
|
+
|
|
189
|
+
Version: current [26.x]
|
|
190
|
+
|
|
191
|
+
On this page
|
|
192
|
+
|
|
193
|
+
# Access Control Enterprise
|
|
194
|
+
|
|
195
|
+
Dremio allows for the implementation of granular-level privileges, which defines a user/role’s access privilege and available actions for specific objects, such as folders and datasets. This is called access management, and gives administrators the ability to restrict access to any object in Dremio.
|
|
196
|
+
|
|
197
|
+
* [Privileges](/current/security/rbac/privileges/) – Privileges enable users to perform explicit operations on objects in Dremio. Additionally, privileges may be set on individual datasets (tables or views) or whole schemas, allowing for a simplified configuration with larger catalogs.
|
|
198
|
+
* [Row-access and column-masking policies](/current/data-products/govern/row-column-policies-udf/) – Row-access and column-masking policies enable you to grant users access to particular rows or columns.
|
|
199
|
+
|
|
200
|
+
The following APIs are available for managing access control:
|
|
201
|
+
|
|
202
|
+
* [Grants APIs](/current/reference/api/catalog/grants/)
|
|
203
|
+
* [Privileges API](/current/reference/api/catalog/privileges/)
|
|
204
|
+
* [Roles API](/current/reference/api/roles/)
|
|
205
|
+
* [Users API](/current/reference/api/user/)
|
|
206
|
+
|
|
207
|
+
A wide range of SQL commands are also available:
|
|
208
|
+
|
|
209
|
+
* [Privileges SQL Commands](/current/reference/sql/commands/rbac/)
|
|
210
|
+
* [Roles SQL Commands](/current/reference/sql/commands/roles/)
|
|
211
|
+
* [Users SQL Commands](/current/reference/sql/commands/users/)
|
|
212
|
+
|
|
213
|
+
## Object Hierarchy
|
|
214
|
+
|
|
215
|
+
Each object resides within a container in a hierarchy of containers. The upper-most container exists as the system user, or administrator account. All other objects are contained within sources or spaces, organized into folders. The hierarchy of these objects is illustrated below.
|
|
216
|
+
|
|
217
|
+

|
|
218
|
+
|
|
219
|
+
## Inheritance
|
|
220
|
+
|
|
221
|
+
The objects to which privileges are granted depend on the inheritance model. In other words, granting access to a parent object, such as a folder, also gives that user access to any existing and future datasets contained in that folder. For example, giving a user privileges to ALL DATASETS will only grant the user access to existing datasets, not the folders that contain the datasets. In comparison, granting privileges at the source level will extend that user's access to the source's existing and future folders/schema and datasets. The object to which a user's privileges are applied is also known as the scope, and follow a parent-child relationship.
|
|
222
|
+
|
|
223
|
+
By the rules of inheritance, user or group access may be granted as high or low in the object hierarchy as you wish for access to reach.
|
|
224
|
+
|
|
225
|
+
Permissions granted to an individual table or view mean that a user's access only extends to that dataset, not to the parent folder or other datasets created in the same folder. So if a user only needs access to a single dataset, administrators need only grant privileges to that object.
|
|
226
|
+
|
|
227
|
+

|
|
228
|
+
|
|
229
|
+
Consider the image above, which shows an example of object structure in Dremio. If a user is granted privileges to a single dataset, such as `TableA1`, then that is the one object they have access to. However, if a user is granted privileges at the folder level, such as `Folder1`, then that user's access extends to any existing and future child objects created, including `FolderA`, `TableA1`, `TableB1`, and so on.
|
|
230
|
+
|
|
231
|
+
note
|
|
232
|
+
|
|
233
|
+
If a user has privileges for a single table, they may create views based on that dataset, but with the user now having `ALTER` and `MANAGE GRANTS` privileges for any view. However, the user still retains the same privileges as before with the original dataset. For more information, read View Delegation.
|
|
234
|
+
|
|
235
|
+
## Scope
|
|
236
|
+
|
|
237
|
+
Scope is a concept used to describe what objects a user or group has access to. Privileges are assigned by object, which ultimately determines what a grantee may perform set functions upon. For example, you may set a user's scope to `FolderA`, which will give the user access to all existing and future datasets contained in the folder, as well as the datasets' wikis. But they will not have access to any other folders or the source. The object a user is granted access to is dependent on the inheritance model, which means based on the object type, it may contain child objects. For example, if a user is granted privilege to a folder, the user's access also extends to all existing and future datasets contained in that folder.
|
|
238
|
+
|
|
239
|
+
For example, `user1` is granted the `SELECT` privilege to the folder `FolderC`. This object contains multiple datasets, which the user may now access. However, there exists a parent folder and another subfolder with its own datasets.
|
|
240
|
+
|
|
241
|
+

|
|
242
|
+
|
|
243
|
+
Because of the established scope, `user1` may not access `FolderD` because they were only granted access to `FolderC`'s objects.
|
|
244
|
+
|
|
245
|
+
### Current vs. Future Objects
|
|
246
|
+
|
|
247
|
+
Based on the selected scope, you may restrict a user's access to future and existing datasets. For example, if you select a single table as the scope of a user's privilege, then that user may only perform that action to the existing dataset, as well as any future views they create using that table. However, they may not access any views created from a table by another user (see the example below). However, if the scope is instead set at the folder level, then the user may perform the granted privilege to all tables and views contained in that folder (see the example below).
|
|
248
|
+
|
|
249
|
+
## Ownership
|
|
250
|
+
|
|
251
|
+
Object ownership is a security feature used to control access to an object. In Dremio, each object must have an owner, and may have only one owner. Ownership is automatically granted to the user who initially created the object. For example, when `user1` creates an S3 data source, Dremio automatically assigns ownership of the source to `user1`.
|
|
252
|
+
|
|
253
|
+
The privileges included in object ownership depend on your configuration.
|
|
254
|
+
|
|
255
|
+
* By default, ownership includes all privileges for that object. The object owner can grant or revoke access privileges to the object and its child objects, modify an object's settings, and delete the object as desired. See Granting Privileges Using SQL Commands for more information.
|
|
256
|
+
* Managed access spaces centralize the administration of access privileges in shared spaces to a limited set of users and roles, including the space owner. By limiting privilege grant authority, managed access spaces help ensure consistent and controlled access policies and reduce the risk of unauthorized access. See Managed Access Spaces.
|
|
257
|
+
|
|
258
|
+
The following behaviors and limitations apply to ownership:
|
|
259
|
+
|
|
260
|
+
* Each object may only have one owner.
|
|
261
|
+
* An object's creator is automatically granted ownership.
|
|
262
|
+
* Object ownership may be assigned or modified to a new user or role with the [`GRANT OWNERSHIP`](/current/reference/sql/commands/rbac) command.
|
|
263
|
+
* The object's access control settings may not work if the owner is deleted or removed. See View Delegation.
|
|
264
|
+
* Object owners may be identified by querying the [`sys."tables"`](/current/reference/sql/system-tables/tables) table or [`sys.views`](/current/reference/sql/system-tables/views) table. If an object has no owner, the `owner_id` will display as `$unowned`.
|
|
265
|
+
|
|
266
|
+
### Managed Access Spaces
|
|
267
|
+
|
|
268
|
+
Managed access spaces centralize the administration of access privileges to a limited set of users and roles, including:
|
|
269
|
+
|
|
270
|
+
* Owner of the space
|
|
271
|
+
* Dremio administrator
|
|
272
|
+
* Users or roles explicitly granted the MANAGE GRANTS privilege on the object or any of its parents
|
|
273
|
+
|
|
274
|
+
When using managed access spaces, Dremio displays shared spaces with a lock icon  on the [Datasets](/current/get-started/quick_tour#datasets-page) and [SQL Runner](/current/get-started/quick_tour#sql-runner) pages. Owners of folders, views, and functions in a locked space cannot grant or revoke privileges on those objects to other users or roles.
|
|
275
|
+
|
|
276
|
+
| User or role | Grants/revokes privileges in default spaces | Grants/revokes privileges in managed access spaces |
|
|
277
|
+
| --- | --- | --- |
|
|
278
|
+
| Dremio administrator | Yes | Yes |
|
|
279
|
+
| Owner of a shared space | Yes | Yes |
|
|
280
|
+
| Owner of a folder in a shared space | Yes | No |
|
|
281
|
+
| Owner of a view in a shared space | Yes | No |
|
|
282
|
+
| Owner of a function in a shared space | Yes | No |
|
|
283
|
+
| User or role with MANAGE GRANTS | Yes | Yes |
|
|
284
|
+
|
|
285
|
+
Managed access spaces do not impact:
|
|
286
|
+
|
|
287
|
+
* Any user home space
|
|
288
|
+
* Sources, including Nessie catalogs
|
|
289
|
+
* Global objects, such as scripts and user-defined functions
|
|
290
|
+
|
|
291
|
+
Managed access spaces do not override a MANAGE GRANT privilege granted at system scope.
|
|
292
|
+
|
|
293
|
+
The Dremio administrator can activate managed access spaces by setting the `security.access-control.managed-access-spaces.enabled` [support key](/current/help-support/support-settings/#support-keys) on the Support Settings page.
|
|
294
|
+
|
|
295
|
+
### View Delegation
|
|
296
|
+
|
|
297
|
+
View delegation means that the data in tables with restricted access may be available to other Dremio users by creating views. View delegation is the critical capability of the Dremio semantic layer that allows users to run queries without accessing the underlying tables and views directly.
|
|
298
|
+
|
|
299
|
+
The fundamental principles of view delegation include the following:
|
|
300
|
+
|
|
301
|
+
* The privileges of a view's owner determine whether the view can use dependent tables and views.
|
|
302
|
+
* Additional user access to a view is controlled by privilege grants directly on the view, forming a privilege chain from the view to the underlying table.
|
|
303
|
+
|
|
304
|
+
note
|
|
305
|
+
|
|
306
|
+
A shared view selects from the underlying dataset using the view owner's permissions at the time of the view's last modification, even if the end user querying the view lacks privileges to modify the underlying table. This applies to each table on the data graph and chain of datasets.
|
|
307
|
+
|
|
308
|
+
View delegation is different from privilege assignment. View delegation is an implicit delegation of the SELECT privilege on underlying objects, which means that users who run queries on a view must have access privileges on the view but do not need privileges on underlying tables. Privilege assignment is an explicit delegation providing direct access to an object.
|
|
309
|
+
|
|
310
|
+
#### Example 1: View Delegation
|
|
311
|
+
|
|
312
|
+
`user1` has the SELECT privilege on `table1` and creates `view1` to filter and transform data in `table1`. `user2` asks for access privileges to run queries on `view1` as well. `user2` may obtain the SELECT privilege for `view1` from the following authorized users:
|
|
313
|
+
|
|
314
|
+
* By default, view owners such as `user1` can grant and revoke privileges to other users, as appropriate.
|
|
315
|
+
* A limited set of users and roles, such as the space owner, can grant or revoke privileges in managed access spaces.
|
|
316
|
+
* Dremio administrators or other users with the MANAGE GRANTS privilege can grant privileges to other users.
|
|
317
|
+
|
|
318
|
+
If access for `user2` is appropriate, the authorized user runs `GRANT SELECT ON VIEW view1 TO USER user2` to grant the SELECT privilege to `user2`. After `user2` obtains the SELECT privilege, they can run queries on `view1`, utilizing the privilege of `user1` as owner to `view1` to SELECT from `table1`.
|
|
319
|
+
|
|
320
|
+
| Object | `user1` | `user2` |
|
|
321
|
+
| --- | --- | --- |
|
|
322
|
+
| `view1` | OWNERSHIP | SELECT |
|
|
323
|
+
| `table1` | SELECT | None |
|
|
324
|
+
|
|
325
|
+
*Privileges by user in Example 1*
|
|
326
|
+
|
|
327
|
+
The following table describes the actions that each user may perform based on their privileges:
|
|
328
|
+
|
|
329
|
+
| Task | Works for `user1` | Works for `user2` |
|
|
330
|
+
| --- | --- | --- |
|
|
331
|
+
| Use `view1` in queries | Yes, `user1` owns `view1` and has the SELECT privilege on `table1`. | Yes, `user2` has the SELECT privilege on `view1` and the owner of `view1` has the SELECT privilege on `table1`. |
|
|
332
|
+
| Modify the query in `view1` | Yes, `user1` is the owner of `view1`. Ownership includes the ALTER privilege to modify the view definition. | No, `user2` is not the owner of `view1` and does not have the ALTER privilege. |
|
|
333
|
+
| Use `table1` in queries | Yes, `user1` has the SELECT privilege on `table1`. | No, `user2` has no privileges on `table1` and cannot see it in the Dremio user interface. |
|
|
334
|
+
|
|
335
|
+
*Tasks by user in Example 1*
|
|
336
|
+
|
|
337
|
+
#### Example 2: View Delegation with Revoked Access to the Original Table
|
|
338
|
+
|
|
339
|
+
To continue the previous example, `user1` has SELECT access to `table1`, which gives `user1` access through `view1`. An administrator revokes the SELECT access of `user1` on `table1`.
|
|
340
|
+
|
|
341
|
+
| Object | `user1` | `user2` |
|
|
342
|
+
| --- | --- | --- |
|
|
343
|
+
| `view1` | OWNERSHIP | SELECT |
|
|
344
|
+
| `table1` | None | None |
|
|
345
|
+
|
|
346
|
+
*Privileges by user in Example 2*
|
|
347
|
+
|
|
348
|
+
The following table describes the actions that each user may perform based on their privileges:
|
|
349
|
+
|
|
350
|
+
| Task | Works for `user1` | Works for `user2` |
|
|
351
|
+
| --- | --- | --- |
|
|
352
|
+
| Use `view1` in queries | No, `user1` no longer has SELECT on the underlying `table1`. | No, `user2` no longer has a chain of permission through `user1` to `table1`. |
|
|
353
|
+
| Modify the query in `view1` | No, `user1` is the owner of `view1` but any attempts to edit `view1` will fail unless the references to `table1` are removed since `user1` can no longer access `table1`. | No, `user2` is not the owner of `view1` and does not possess the ALTER privilege. |
|
|
354
|
+
| Use `table1` in queries | No, `user1` has no privileges on `table1`. | No, `user2` has no privileges on `table1`. |
|
|
355
|
+
|
|
356
|
+
*Tasks by user in Example 2*
|
|
357
|
+
|
|
358
|
+
## Privileges
|
|
359
|
+
|
|
360
|
+
Privileges refer to the defined levels of access or permissions that are assigned to roles or users within Dremio. Privileges determine the operations a user or role can perform on securable objects. Examples of privileges in Dremio include SELECT on a table or view, INSERT on a table, DELETE on a table, CREATE TABLE on a folder, and MANAGE GRANTS on any object.
|
|
361
|
+
|
|
362
|
+
The assignment of privileges to roles, or users, should be based on the principle of least privilege, where users or roles are given only the minimum privileges required to perform their tasks effectively.
|
|
363
|
+
|
|
364
|
+
Privileges can be managed using SQL, APIs, or the Dremio Console.
|
|
365
|
+
|
|
366
|
+
For more information, please refer to [Privileges](/current/security/rbac/privileges).
|
|
367
|
+
|
|
368
|
+
### Granting Privileges Using the Dremio Console
|
|
369
|
+
|
|
370
|
+
You can share catalog objects with others in your organization by granting privileges on the objects to users and roles as follows:
|
|
371
|
+
|
|
372
|
+
1. Locate the desired object.
|
|
373
|
+
2. Click  or  depending on the object.
|
|
374
|
+
3. In the object settings dialog, select **Privileges** from the settings sidebar.
|
|
375
|
+
|
|
376
|
+
note
|
|
377
|
+
|
|
378
|
+
For some object types, the settings dialog automatically opens to display the privilege settings, and you do not need to select the Privileges tab.
|
|
379
|
+
|
|
380
|
+
4. In the Privileges dialog, in the field under **Add User/Role**, enter the exact names of the users and roles to which you want to grant privileges.
|
|
381
|
+
|
|
382
|
+
note
|
|
383
|
+
|
|
384
|
+
Because all users are members of the PUBLIC role, you can use the PUBLIC role to grant privileges to all users.
|
|
385
|
+
|
|
386
|
+
5. Click **Add to Privileges**.
|
|
387
|
+
|
|
388
|
+
For each entry in the **Add User/Role** field that matches a user or role in Dremio, a record appears in the USERS/ROLES table.
|
|
389
|
+
|
|
390
|
+
6. In the USERS/ROLES table, toggle the checkbox for each privilege you want to grant for that user or role. For a description of the privilege, hover over the column name in the USERS/ROLES table. See the example below:
|
|
391
|
+
|
|
392
|
+

|
|
393
|
+
|
|
394
|
+
7. (Optional) Repeat steps 4-6 if you want to add more users or roles and grant them privileges.
|
|
395
|
+
8. When finished, click **Save**.
|
|
396
|
+
|
|
397
|
+
### Revoking Privileges Using the Dremio Console
|
|
398
|
+
|
|
399
|
+
To revoke user and role privileges, complete the following steps:
|
|
400
|
+
|
|
401
|
+
1. Locate the desired object.
|
|
402
|
+
2. Click  or  depending on the object.
|
|
403
|
+
3. In the object settings dialog, select **Privileges** from the settings sidebar.
|
|
404
|
+
|
|
405
|
+
note
|
|
406
|
+
|
|
407
|
+
For some object types, the settings dialog automatically opens to display the privilege settings, and you do not need to select the Privileges tab.
|
|
408
|
+
4. In the USERS/ROLES table, locate the desired user or role record. If the user or role is not listed, then they do not have specific privileges on the object.
|
|
409
|
+
|
|
410
|
+
* To revoke some but not all privileges for the user or role, clear the checkboxes in the columns for the privileges you wish to revoke.
|
|
411
|
+
* To revoke all privileges for a user or role, click  next to the user or role name and select **Remove**.
|
|
412
|
+
|
|
413
|
+
For a description of the privilege, hover over the column name in the USERS/ROLES table. See the example below:
|
|
414
|
+
|
|
415
|
+

|
|
416
|
+
|
|
417
|
+
5. When finished, click **Save**.
|
|
418
|
+
|
|
419
|
+
note
|
|
420
|
+
|
|
421
|
+
If a user has a specific privilege on an object through their memberships in multiple roles and the privilege is revoked for one of the roles, the user retains the privilege until it is revoked on the same object for all roles to which the user belongs.
|
|
422
|
+
|
|
423
|
+
tip
|
|
424
|
+
|
|
425
|
+
You can also grant or revoke privileges using [SQL commands](/current/reference/sql/commands/rbac/) or [APIs](/current/reference/api/catalog/grants/).
|
|
426
|
+
|
|
427
|
+
### Granting Privileges Using SQL Commands
|
|
428
|
+
|
|
429
|
+
When granting privileges to users and roles with SQL commands, you may follow one of three methods: granting to a single dataset, granting to ALL DATASETS, and granting to a scope. Examples of these methods may be found under each section.
|
|
430
|
+
|
|
431
|
+
Each example includes an SQL command. For more information about command syntax, review the [Privileges (GRANT/REVOKE) SQL commands](/current/reference/sql/commands/rbac).
|
|
432
|
+
|
|
433
|
+
note
|
|
434
|
+
|
|
435
|
+
Because all users are members of the PUBLIC role, you can use the PUBLIC role to grant privileges to all users.
|
|
436
|
+
|
|
437
|
+
#### Granting to a Single Dataset
|
|
438
|
+
|
|
439
|
+
When you have a user that needs access to only one table and no other objects, then you would simply assign them privileges for that dataset (see the example scenario outlined below).
|
|
440
|
+
|
|
441
|
+
You should use this method if you want to restrict a user's access to any other existing or future datasets.
|
|
442
|
+
|
|
443
|
+
note
|
|
444
|
+
|
|
445
|
+
If you're granting the user access to a table, then remember that they'll be able to create views based on that dataset, which that user can then grant access to other users.
|
|
446
|
+
|
|
447
|
+
##### Example: Single Dataset
|
|
448
|
+
|
|
449
|
+
You have a user that you only want to give access to an individual table. You would need to navigate to the *Privileges* screen from that dataset's settings and grant the user the `SELECT` privilege, or perform the following command from the SQL Editor:
|
|
450
|
+
|
|
451
|
+
Single dataset example
|
|
452
|
+
|
|
453
|
+
```
|
|
454
|
+
GRANT SELECT ON TABLE TableA1 TO USER user1
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
The image below illustrates the objects `user1` now has access to.
|
|
458
|
+
|
|
459
|
+

|
|
460
|
+
|
|
461
|
+
This restricts `user1` so that they may only access the `TableA1` table, not any other datasets contained in the same folder. However, `user1` may still create views based on `TableA1`.
|
|
462
|
+
|
|
463
|
+
#### Granting to ALL DATASETS
|
|
464
|
+
|
|
465
|
+
When you have a user that needs access to all existing datasets, then you would use the SQL syntax `ON ALL DATASETS` (see the example scenario outlined below). This gives the user access to all existing datasets. The user would not, however, automatically receive access to any future datasets created by other users.
|
|
466
|
+
|
|
467
|
+
You should use this method of privilege assignment if you want to restrict a user's access to parent objects, but still wish for them to have access to all existing datasets.
|
|
468
|
+
|
|
469
|
+
##### Example: All Datasets
|
|
470
|
+
|
|
471
|
+
You have a specific user that needs access to all datasets in a specific folder, but they do not require privileges for the folders containing these tables. You would then execute the following command from the SQL Editor:
|
|
472
|
+
|
|
473
|
+
All datasets example
|
|
474
|
+
|
|
475
|
+
```
|
|
476
|
+
GRANT SELECT ON ALL DATASETS IN SYSTEM TO USER user1
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
The image below illustrates the objects `user1` now has access to.
|
|
480
|
+
|
|
481
|
+

|
|
482
|
+
|
|
483
|
+
This command restricts the scope of `user1` to all datasets presently found in `source1`, such as `TableC1` and `TableD1`. Should additional datasets be created in the future, `user1` will not have access to them.
|
|
484
|
+
|
|
485
|
+
#### Granting to a Scope
|
|
486
|
+
|
|
487
|
+
When you want to grant a user access to a parent object, such as a folder, this will also grant the user access to any datasets contained (see the example scenario outlined below).
|
|
488
|
+
|
|
489
|
+
You should use this method of privilege management if you wanted to grant a user access to all existing and future datasets contained under a parent object.
|
|
490
|
+
|
|
491
|
+
##### Example: Scope
|
|
492
|
+
|
|
493
|
+
This method grants a user access to all existing and future datasets contained under a specified object. To accomplish this, you need to navigate to the *Privileges* screen from that folder's settings and grant the user the `SELECT` privilege, or execute the following command from the SQL Editor:
|
|
494
|
+
|
|
495
|
+
Scope example
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
GRANT SELECT ON FOLDER Folder3 TO USER user1
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
The image below illustrates the objects `user1` now has access to.
|
|
502
|
+
|
|
503
|
+

|
|
504
|
+
|
|
505
|
+
This grants `user1` the `SELECT` privilege on `Folder3`, which means they now have access to all existing and future datasets contained in that folder and its subfolders.
|
|
506
|
+
|
|
507
|
+
Was this page helpful?
|
|
508
|
+
|
|
509
|
+
[Previous
|
|
510
|
+
|
|
511
|
+
Personal Access Tokens](/current/security/authentication/personal-access-tokens)[Next
|
|
512
|
+
|
|
513
|
+
Privileges](/current/security/rbac/privileges)
|
|
514
|
+
|
|
515
|
+
* Object Hierarchy
|
|
516
|
+
* Inheritance
|
|
517
|
+
* Scope
|
|
518
|
+
+ Current vs. Future Objects
|
|
519
|
+
* Ownership
|
|
520
|
+
+ Managed Access Spaces
|
|
521
|
+
+ View Delegation
|
|
522
|
+
* Privileges
|
|
523
|
+
+ Granting Privileges Using the Dremio Console
|
|
524
|
+
+ Revoking Privileges Using the Dremio Console
|
|
525
|
+
+ Granting Privileges Using SQL Commands
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
# Source: https://docs.dremio.com/current/security/integrations/
|
|
530
|
+
|
|
531
|
+
Version: current [26.x]
|
|
532
|
+
|
|
533
|
+
# Integrations with Third-Party Access Control and Data Governance Platforms Enterprise
|
|
534
|
+
|
|
535
|
+
Dremio supports the following third-party integrations for managing access control and data governance:
|
|
536
|
+
|
|
537
|
+
* [AWS Lake Formation](/current/security/integrations/lake-formation/)
|
|
538
|
+
* [Privacera](/current/security/integrations/integrations/privacera)
|
|
539
|
+
* [Apache Ranger: Row-Level Filtering & Column-Masking](/current/security/integrations/row-column-policies-ranger)
|
|
540
|
+
|
|
541
|
+
Was this page helpful?
|
|
542
|
+
|
|
543
|
+
[Previous
|
|
544
|
+
|
|
545
|
+
Inbound Impersonation](/current/security/rbac/inbound-impersonation)[Next
|
|
546
|
+
|
|
547
|
+
AWS Lake Formation](/current/security/integrations/lake-formation/)
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
# Source: https://docs.dremio.com/current/security/secrets-management/
|
|
552
|
+
|
|
553
|
+
Version: current [26.x]
|
|
554
|
+
|
|
555
|
+
# Secrets Management Enterprise
|
|
556
|
+
|
|
557
|
+
When you connect to data sources in Dremio or list secrets in Dremio configuration files, you can use a secrets management service to provide sensitive information like passwords and secret access keys instead of providing it in plaintext. When Dremio needs the value of one of these secrets to authenticate to a data source or another service, Dremio retrieves the value directly from the secrets management service using the secret reference you provide.
|
|
558
|
+
|
|
559
|
+
Dremio supports the following secrets management providers:
|
|
560
|
+
|
|
561
|
+
* [AWS Secrets Manager](/current/security/secrets-management/aws-secrets-manager/)
|
|
562
|
+
* [Azure Key Vault](/current/security/secrets-management/azure-key-vault/)
|
|
563
|
+
* [HashiCorp Vault](/current/security/secrets-management/hashicorp-vault/)
|
|
564
|
+
|
|
565
|
+
Was this page helpful?
|
|
566
|
+
|
|
567
|
+
[Previous
|
|
568
|
+
|
|
569
|
+
Apache Ranger](/current/security/integrations/row-column-policies-ranger)[Next
|
|
570
|
+
|
|
571
|
+
AWS Secrets Manager](/current/security/secrets-management/aws-secrets-manager)
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
# Source: https://docs.dremio.com/current/security/auditing/
|
|
576
|
+
|
|
577
|
+
Version: current [26.x]
|
|
578
|
+
|
|
579
|
+
On this page
|
|
580
|
+
|
|
581
|
+
# Audit Logging Enterprise
|
|
582
|
+
|
|
583
|
+
For organizations subject to compliance and regulation where auditing is regularly required, Dremio offers full audit logging, wherein all user activities performed within Dremio are tracked and traceable via the `audit.json` file. Each time a user performs an action within Dremio, such as logging in or creating a view, the audit log captures the user's ID and username, objects affected, action performed, event type, SQL statements used, and more.
|
|
584
|
+
|
|
585
|
+
Audit logging is enabled by default and is available only to users with administrative rights at the System level.
|
|
586
|
+
|
|
587
|
+
## Audit Log Location
|
|
588
|
+
|
|
589
|
+
The log-file location may be configured via the `dremio.log.path` property in the [`dremio-env` file](/current/deploy-dremio/other-options/standalone/dremio-config/dremio-env/). You can specify their location, size, and rotation schedule.
|
|
590
|
+
|
|
591
|
+
## Tracked Events and Actions
|
|
592
|
+
|
|
593
|
+
Dremio supports audit logging for the following objects (event types) and actions:
|
|
594
|
+
|
|
595
|
+
| Event Type | Actions |
|
|
596
|
+
| --- | --- |
|
|
597
|
+
| AI\_AGENT | REQUEST, RESPONSE |
|
|
598
|
+
| AUTHENTICATION | LOGIN |
|
|
599
|
+
| ENGINE | CREATE\_STARTED, UPDATE\_STARTED, DELETE\_STARTED |
|
|
600
|
+
| ENGINE\_CONFIG | CREATE, UPDATE, DELETE, START, STOP, SCALE\_UP, SCALE\_DOWN |
|
|
601
|
+
| ENGINE\_SCALING | SCALE\_UP\_STARTED, SCALE\_DOWN\_STARTED |
|
|
602
|
+
| FOLDER | CREATE, UPDATE, DELETE |
|
|
603
|
+
| LABEL | CREATE, UPDATE, DELETE |
|
|
604
|
+
| MODEL\_PROVIDER\_CONFIG | CREATE, UPDATE, DELETE, SET\_DEFAULT |
|
|
605
|
+
| PERSONAL\_ACCESS\_TOKEN | CREATE, DELETE |
|
|
606
|
+
| PHYSICAL\_DATASET | CREATE, UPDATE, DELETE |
|
|
607
|
+
| PRIVILEGE | UPDATE, DELETE |
|
|
608
|
+
| QUEUE | CREATE, UPDATE, DELETE |
|
|
609
|
+
| REFLECTION | CREATE, UPDATE, DELETE |
|
|
610
|
+
| ROLE | CREATE, UPDATE, DELETE |
|
|
611
|
+
| SOURCE | CREATE, UPDATE, DELETE |
|
|
612
|
+
| SPACE | CREATE, UPDATE, DELETE |
|
|
613
|
+
| SUPPORT\_SETTING | RESET, SET |
|
|
614
|
+
| UDF | CREATE, UPDATE, DELETE |
|
|
615
|
+
| USER\_ACCOUNT | CREATE, UPDATE, DELETE |
|
|
616
|
+
| VIRTUAL\_DATASET | CREATE, RENAME, UPDATE, DELETE |
|
|
617
|
+
| WIKI | CREATE, EDIT, DELETE |
|
|
618
|
+
|
|
619
|
+
## Audit Log Format
|
|
620
|
+
|
|
621
|
+
Audit logs include the following information in JSON format:
|
|
622
|
+
|
|
623
|
+
| Key | Value |
|
|
624
|
+
| --- | --- |
|
|
625
|
+
| `timestamp` | The date and time when the event was recorded. |
|
|
626
|
+
| `userId` | The ID value associated with the user's account. The following values are placeholders that represent internal system users, which Dremio uses to log events before the user authenticates: `1` and `678cc92c-01ed-4db3-9a28-d1f871042d9f`. |
|
|
627
|
+
| `userName` | The username associated with the user account (which is typically used to log in). |
|
|
628
|
+
| `status` | The status of the action, which is typically used to indicate whether the event was approved or allowed. |
|
|
629
|
+
| `eventType` | The object or scope of the interaction that occurred. |
|
|
630
|
+
| `action` | The actual activity performed within the specified scope. This varies based on the `eventType`, but most often would be `CREATE`, `DELETE`, and `UPDATE`. |
|
|
631
|
+
| `details` | The data altered or created. This varies based on the `eventType`. |
|
|
632
|
+
|
|
633
|
+
### Audit Log Examples
|
|
634
|
+
|
|
635
|
+
The following examples show the types of audit records that Dremio captures and the information included in an audit entry for each event type.
|
|
636
|
+
|
|
637
|
+
* AUTHENTICATION
|
|
638
|
+
* ENGINE
|
|
639
|
+
* REFLECTION
|
|
640
|
+
* VIRTUAL\_DATASET
|
|
641
|
+
|
|
642
|
+
User `dremio` logged in on the Dremio application.
|
|
643
|
+
|
|
644
|
+
The audit log would have the following information:
|
|
645
|
+
|
|
646
|
+
Authentication log
|
|
647
|
+
|
|
648
|
+
```
|
|
649
|
+
{
|
|
650
|
+
"timestamp": "2021-11-23 16:30:53,400",
|
|
651
|
+
"userContext": {
|
|
652
|
+
"userId": "1",
|
|
653
|
+
"userName": "$dremio$"
|
|
654
|
+
},
|
|
655
|
+
"status": "OK",
|
|
656
|
+
"eventType": "AUTHENTICATION",
|
|
657
|
+
"action": "LOGIN",
|
|
658
|
+
"details": {
|
|
659
|
+
"userName": "dremio",
|
|
660
|
+
"userId": "",
|
|
661
|
+
"source": "FLIGHT"
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
User `dremio` created an engine called `preview`.
|
|
667
|
+
|
|
668
|
+
The audit log would have the following information:
|
|
669
|
+
|
|
670
|
+
Engine log
|
|
671
|
+
|
|
672
|
+
```
|
|
673
|
+
{
|
|
674
|
+
"timestamp": "2025-04-07 13:25:41,193",
|
|
675
|
+
"userContext": {
|
|
676
|
+
"userId": "b8c3f553-93ca-4b6b-95dc-4d6c03cdb58f",
|
|
677
|
+
"userName": "dremio"
|
|
678
|
+
},
|
|
679
|
+
"status": "OK",
|
|
680
|
+
"eventType": "ENGINE",
|
|
681
|
+
"action": "CREATE_STARTED",
|
|
682
|
+
"details": {
|
|
683
|
+
"engineId": "541bf413-b66d-4fc0-8e33-e103efdf6bdc",
|
|
684
|
+
"engineName": "preview",
|
|
685
|
+
"engineSize": "2XSmall",
|
|
686
|
+
"resourceAllocationOffset": "reserve-2-8",
|
|
687
|
+
"targetCpuCapacity": "16C"
|
|
688
|
+
"autoStopDelaySecs": 3600,
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
User `dremio` created a Reflection called `Raw Reflection (1)` in the Dremio console.
|
|
694
|
+
|
|
695
|
+
The audit log would have the following information:
|
|
696
|
+
|
|
697
|
+
Reflection log
|
|
698
|
+
|
|
699
|
+
```
|
|
700
|
+
{
|
|
701
|
+
"timestamp": "2021-11-22 10:06:38,432",
|
|
702
|
+
"userContext": {
|
|
703
|
+
"userId": "6ab04602-410b-4031-87ae-2d3d5f7dc",
|
|
704
|
+
"userName": "dremio"
|
|
705
|
+
},
|
|
706
|
+
"status": "OK",
|
|
707
|
+
"eventType": "REFLECTION",
|
|
708
|
+
"action": "CREATE",
|
|
709
|
+
"details": {
|
|
710
|
+
"reflectionId": "a5251b05-4873-4a9d-a008-303eeeeed",
|
|
711
|
+
"name": "Raw Reflection (1)",
|
|
712
|
+
"dataset": "7e3d4a8a-b92d-41ab-96dc-6a76a6248",
|
|
713
|
+
"type": "RAW",
|
|
714
|
+
"sortColumns": [
|
|
715
|
+
{
|
|
716
|
+
"name": "fare_amount"
|
|
717
|
+
}
|
|
718
|
+
],
|
|
719
|
+
"partitionColumns": [
|
|
720
|
+
{
|
|
721
|
+
"name": "passenger_count"
|
|
722
|
+
}
|
|
723
|
+
],
|
|
724
|
+
"distributionColumns": [],
|
|
725
|
+
"dimensions": [],
|
|
726
|
+
"measures": [],
|
|
727
|
+
"displayColumns": [
|
|
728
|
+
{
|
|
729
|
+
"name": "passenger_count"
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
"name": "pickup_datetime"
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"name": "trip_distance_mi"
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
"name": "fare_amount"
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"name": "tip_amount"
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
"name": "total_amount"
|
|
745
|
+
}
|
|
746
|
+
],
|
|
747
|
+
"partitiondistributionstrategy": "CONSOLIDATED",
|
|
748
|
+
"arrowCachingEnabled": false,
|
|
749
|
+
"targetDataset": ""
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
User `dremio` issued a SQL command to `CREATE` a view in Dremio's SQL editor.
|
|
755
|
+
|
|
756
|
+
The audit log would have the following information:
|
|
757
|
+
|
|
758
|
+
View (virtual dataset) log
|
|
759
|
+
|
|
760
|
+
```
|
|
761
|
+
{
|
|
762
|
+
"timestamp": "2021-11-17 14:31:43,594",
|
|
763
|
+
"userContext": {
|
|
764
|
+
"userId": "4a3ea2fa-a3f6-4adb-8852-041a28cac",
|
|
765
|
+
"userName": "dremio"
|
|
766
|
+
},
|
|
767
|
+
"status": "OK",
|
|
768
|
+
"eventType": "VIRTUAL_DATASET",
|
|
769
|
+
"action": "CREATE",
|
|
770
|
+
"details": {
|
|
771
|
+
"id": "da08848d-d80d-4414-aaf4-40ce866ea",
|
|
772
|
+
"name": "a_employees",
|
|
773
|
+
"tag": "gwN/p7E5E1Q=",
|
|
774
|
+
"path": "myView.a_employees",
|
|
775
|
+
"sql": "SELECT \"firstname\", \"zipcode\"\nFROM \"local-msql\".\"dremio_db1\".\"Employees\"\nWHERE \"zipcode\" LIKE 'a%'",
|
|
776
|
+
"sqlContext": "myView",
|
|
777
|
+
"fields": [
|
|
778
|
+
{
|
|
779
|
+
"name": "firstname",
|
|
780
|
+
"dataType": "TEXT"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"name": "zipcode",
|
|
784
|
+
"dataType": "TEXT"
|
|
785
|
+
}
|
|
786
|
+
],
|
|
787
|
+
"oldName": "",
|
|
788
|
+
"oldPath": ""
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
Was this page helpful?
|
|
794
|
+
|
|
795
|
+
[Previous
|
|
796
|
+
|
|
797
|
+
HashiCorp Vault](/current/security/secrets-management/hashicorp-vault)[Next
|
|
798
|
+
|
|
799
|
+
Compliance](/current/security/compliance)
|
|
800
|
+
|
|
801
|
+
* Audit Log Location
|
|
802
|
+
* Tracked Events and Actions
|
|
803
|
+
* Audit Log Format
|
|
804
|
+
+ Audit Log Examples
|
|
805
|
+
|
|
806
|
+
---
|
|
807
|
+
|
|
808
|
+
# Source: https://docs.dremio.com/current/security/compliance
|
|
809
|
+
|
|
810
|
+
Version: current [26.x]
|
|
811
|
+
|
|
812
|
+
On this page
|
|
813
|
+
|
|
814
|
+
# Regulatory Compliance
|
|
815
|
+
|
|
816
|
+
Dremio meets the IT control requirements for several compliance frameworks and certifications, as described below.
|
|
817
|
+
|
|
818
|
+
As the [Dremio Shared Responsibility Models](/responsibility) outline, compliance is a shared responsibility between Dremio and you. The Shared Responsibility Models lay out Dremio's responsibilities for providing standards and compliance and your responsibilities for adhering to those standards.
|
|
819
|
+
|
|
820
|
+
## SOC 2 Type II Report
|
|
821
|
+
|
|
822
|
+
Dremio maintains compliance with the American Institute of Certified Public Accountants (AICPA) System and Organization Controls - Trust Services Criteria, commonly known as SOC 2.
|
|
823
|
+
|
|
824
|
+
### Key Benefits
|
|
825
|
+
|
|
826
|
+
[SOC 2 Type II reports](https://us.aicpa.org/interestareas/frc/assuranceadvisoryservices/aicpasoc2report) provide an in-depth analysis of cloud service providers regarding the safeguards a company uses to protect customer data and how these controls are performing overall. These reports are issued by independent, third-party auditors and cover the key points of Security, Availability, Confidentiality, and Privacy.
|
|
827
|
+
|
|
828
|
+
This independent assessment of Dremio Software provides a detailed report regarding the environments used to provide security and privacy of customer data overall. The report provide descriptions of these controls, the tests performed to assess their effectiveness, the results of said tests, and then an overall opinion regarding the design and operational effectiveness of the environments.
|
|
829
|
+
|
|
830
|
+
## ISO 27001 Certification
|
|
831
|
+
|
|
832
|
+
ISO 27001 is an internationally recognized specification for an Information Security Management System (ISMS). ISO 27001 is the only auditable standard that deals with the overall management of information security, rather than just which technical controls to implement.
|
|
833
|
+
|
|
834
|
+
### Key Benefits
|
|
835
|
+
|
|
836
|
+
Obtaining [ISO 27001:2022 certification](https://www.iso.org/isoiec-27001-information-security.html) demonstrates that Dremio employs a comprehensive framework of legal, physical, and technical controls for information risk management.
|
|
837
|
+
|
|
838
|
+
## GDPR Compliance
|
|
839
|
+
|
|
840
|
+
Dremio is compliant with the storage and security of its data according to Article 27 of the General Data Protection Regulation (GDPR). Please see [Dremio's Privacy Policy](https://www.dremio.com/legal/privacy-policy/) for additional information regarding our appointed European Data Protection Office (EDPO) in the EU.
|
|
841
|
+
|
|
842
|
+
### Key Benefits
|
|
843
|
+
|
|
844
|
+
As part of the European Union, specific regulations exist that require companies to [maintain compliance with GDPR](https://gdpr.org/). This governs the way user data is stored, processed, and utilized on Dremio Software. Specifically, this prevents the exploitation of user data and standardizes the data protection laws that services must follow throughout Europe.
|
|
845
|
+
|
|
846
|
+
## CCPA Compliance
|
|
847
|
+
|
|
848
|
+
Dremio maintains compliance with the California Consumer Privacy Act (CCPA), which regulates the handling of personal data and prevents any unauthorized use or sale. Please see [Dremio's Privacy Notice For California Residents](https://www.dremio.com/legal/privacy-policy/) for additional information.
|
|
849
|
+
|
|
850
|
+
### Key Benefits
|
|
851
|
+
|
|
852
|
+
Adherence to [CCPA](https://oag.ca.gov/privacy/ccpa) by an organization ensures that California residents have the right to opt out of having their data sold to third parties, request disclosure of data collected, and request deletion of said data.
|
|
853
|
+
|
|
854
|
+
## HIPAA Compliance
|
|
855
|
+
|
|
856
|
+
Dremio is compliant with the Health Insurance Portability and Accountability Act (HIPAA), a series of federal regulatory standards that outline the lawful use and disclosure of protected health information in the United States. HIPAA compliance is regulated by the Department of Health and Human Services (HHS) and enforced by the Office for Civil Rights (OCR).
|
|
857
|
+
|
|
858
|
+
### Key Benefits
|
|
859
|
+
|
|
860
|
+
Adherence to [HIPAA](https://www.cdc.gov/phlp/publications/topic/hipaa.html) ensures that healthcare providers, health plans, healthcare clearinghouses, and business associates of HIPAA-covered entities must implement multiple safeguards to protect sensitive personal and health information.
|
|
861
|
+
|
|
862
|
+
Was this page helpful?
|
|
863
|
+
|
|
864
|
+
[Previous
|
|
865
|
+
|
|
866
|
+
Audit Logging](/current/security/auditing/)[Next
|
|
867
|
+
|
|
868
|
+
Administration](/current/admin/)
|
|
869
|
+
|
|
870
|
+
* SOC 2 Type II Report
|
|
871
|
+
+ Key Benefits
|
|
872
|
+
* ISO 27001 Certification
|
|
873
|
+
+ Key Benefits
|
|
874
|
+
* GDPR Compliance
|
|
875
|
+
+ Key Benefits
|
|
876
|
+
* CCPA Compliance
|
|
877
|
+
+ Key Benefits
|
|
878
|
+
* HIPAA Compliance
|
|
879
|
+
+ Key Benefits
|
|
880
|
+
|
|
881
|
+
---
|
|
882
|
+
|
|
883
|
+
# Source: https://docs.dremio.com/current/security/rbac
|
|
884
|
+
|
|
885
|
+
Version: current [26.x]
|
|
886
|
+
|
|
887
|
+
On this page
|
|
888
|
+
|
|
889
|
+
# Access Control Enterprise
|
|
890
|
+
|
|
891
|
+
Dremio allows for the implementation of granular-level privileges, which defines a user/role’s access privilege and available actions for specific objects, such as folders and datasets. This is called access management, and gives administrators the ability to restrict access to any object in Dremio.
|
|
892
|
+
|
|
893
|
+
* [Privileges](/current/security/rbac/privileges/) – Privileges enable users to perform explicit operations on objects in Dremio. Additionally, privileges may be set on individual datasets (tables or views) or whole schemas, allowing for a simplified configuration with larger catalogs.
|
|
894
|
+
* [Row-access and column-masking policies](/current/data-products/govern/row-column-policies-udf/) – Row-access and column-masking policies enable you to grant users access to particular rows or columns.
|
|
895
|
+
|
|
896
|
+
The following APIs are available for managing access control:
|
|
897
|
+
|
|
898
|
+
* [Grants APIs](/current/reference/api/catalog/grants/)
|
|
899
|
+
* [Privileges API](/current/reference/api/catalog/privileges/)
|
|
900
|
+
* [Roles API](/current/reference/api/roles/)
|
|
901
|
+
* [Users API](/current/reference/api/user/)
|
|
902
|
+
|
|
903
|
+
A wide range of SQL commands are also available:
|
|
904
|
+
|
|
905
|
+
* [Privileges SQL Commands](/current/reference/sql/commands/rbac/)
|
|
906
|
+
* [Roles SQL Commands](/current/reference/sql/commands/roles/)
|
|
907
|
+
* [Users SQL Commands](/current/reference/sql/commands/users/)
|
|
908
|
+
|
|
909
|
+
## Object Hierarchy
|
|
910
|
+
|
|
911
|
+
Each object resides within a container in a hierarchy of containers. The upper-most container exists as the system user, or administrator account. All other objects are contained within sources or spaces, organized into folders. The hierarchy of these objects is illustrated below.
|
|
912
|
+
|
|
913
|
+

|
|
914
|
+
|
|
915
|
+
## Inheritance
|
|
916
|
+
|
|
917
|
+
The objects to which privileges are granted depend on the inheritance model. In other words, granting access to a parent object, such as a folder, also gives that user access to any existing and future datasets contained in that folder. For example, giving a user privileges to ALL DATASETS will only grant the user access to existing datasets, not the folders that contain the datasets. In comparison, granting privileges at the source level will extend that user's access to the source's existing and future folders/schema and datasets. The object to which a user's privileges are applied is also known as the scope, and follow a parent-child relationship.
|
|
918
|
+
|
|
919
|
+
By the rules of inheritance, user or group access may be granted as high or low in the object hierarchy as you wish for access to reach.
|
|
920
|
+
|
|
921
|
+
Permissions granted to an individual table or view mean that a user's access only extends to that dataset, not to the parent folder or other datasets created in the same folder. So if a user only needs access to a single dataset, administrators need only grant privileges to that object.
|
|
922
|
+
|
|
923
|
+

|
|
924
|
+
|
|
925
|
+
Consider the image above, which shows an example of object structure in Dremio. If a user is granted privileges to a single dataset, such as `TableA1`, then that is the one object they have access to. However, if a user is granted privileges at the folder level, such as `Folder1`, then that user's access extends to any existing and future child objects created, including `FolderA`, `TableA1`, `TableB1`, and so on.
|
|
926
|
+
|
|
927
|
+
note
|
|
928
|
+
|
|
929
|
+
If a user has privileges for a single table, they may create views based on that dataset, but with the user now having `ALTER` and `MANAGE GRANTS` privileges for any view. However, the user still retains the same privileges as before with the original dataset. For more information, read View Delegation.
|
|
930
|
+
|
|
931
|
+
## Scope
|
|
932
|
+
|
|
933
|
+
Scope is a concept used to describe what objects a user or group has access to. Privileges are assigned by object, which ultimately determines what a grantee may perform set functions upon. For example, you may set a user's scope to `FolderA`, which will give the user access to all existing and future datasets contained in the folder, as well as the datasets' wikis. But they will not have access to any other folders or the source. The object a user is granted access to is dependent on the inheritance model, which means based on the object type, it may contain child objects. For example, if a user is granted privilege to a folder, the user's access also extends to all existing and future datasets contained in that folder.
|
|
934
|
+
|
|
935
|
+
For example, `user1` is granted the `SELECT` privilege to the folder `FolderC`. This object contains multiple datasets, which the user may now access. However, there exists a parent folder and another subfolder with its own datasets.
|
|
936
|
+
|
|
937
|
+

|
|
938
|
+
|
|
939
|
+
Because of the established scope, `user1` may not access `FolderD` because they were only granted access to `FolderC`'s objects.
|
|
940
|
+
|
|
941
|
+
### Current vs. Future Objects
|
|
942
|
+
|
|
943
|
+
Based on the selected scope, you may restrict a user's access to future and existing datasets. For example, if you select a single table as the scope of a user's privilege, then that user may only perform that action to the existing dataset, as well as any future views they create using that table. However, they may not access any views created from a table by another user (see the example below). However, if the scope is instead set at the folder level, then the user may perform the granted privilege to all tables and views contained in that folder (see the example below).
|
|
944
|
+
|
|
945
|
+
## Ownership
|
|
946
|
+
|
|
947
|
+
Object ownership is a security feature used to control access to an object. In Dremio, each object must have an owner, and may have only one owner. Ownership is automatically granted to the user who initially created the object. For example, when `user1` creates an S3 data source, Dremio automatically assigns ownership of the source to `user1`.
|
|
948
|
+
|
|
949
|
+
The privileges included in object ownership depend on your configuration.
|
|
950
|
+
|
|
951
|
+
* By default, ownership includes all privileges for that object. The object owner can grant or revoke access privileges to the object and its child objects, modify an object's settings, and delete the object as desired. See Granting Privileges Using SQL Commands for more information.
|
|
952
|
+
* Managed access spaces centralize the administration of access privileges in shared spaces to a limited set of users and roles, including the space owner. By limiting privilege grant authority, managed access spaces help ensure consistent and controlled access policies and reduce the risk of unauthorized access. See Managed Access Spaces.
|
|
953
|
+
|
|
954
|
+
The following behaviors and limitations apply to ownership:
|
|
955
|
+
|
|
956
|
+
* Each object may only have one owner.
|
|
957
|
+
* An object's creator is automatically granted ownership.
|
|
958
|
+
* Object ownership may be assigned or modified to a new user or role with the [`GRANT OWNERSHIP`](/current/reference/sql/commands/rbac) command.
|
|
959
|
+
* The object's access control settings may not work if the owner is deleted or removed. See View Delegation.
|
|
960
|
+
* Object owners may be identified by querying the [`sys."tables"`](/current/reference/sql/system-tables/tables) table or [`sys.views`](/current/reference/sql/system-tables/views) table. If an object has no owner, the `owner_id` will display as `$unowned`.
|
|
961
|
+
|
|
962
|
+
### Managed Access Spaces
|
|
963
|
+
|
|
964
|
+
Managed access spaces centralize the administration of access privileges to a limited set of users and roles, including:
|
|
965
|
+
|
|
966
|
+
* Owner of the space
|
|
967
|
+
* Dremio administrator
|
|
968
|
+
* Users or roles explicitly granted the MANAGE GRANTS privilege on the object or any of its parents
|
|
969
|
+
|
|
970
|
+
When using managed access spaces, Dremio displays shared spaces with a lock icon  on the [Datasets](/current/get-started/quick_tour#datasets-page) and [SQL Runner](/current/get-started/quick_tour#sql-runner) pages. Owners of folders, views, and functions in a locked space cannot grant or revoke privileges on those objects to other users or roles.
|
|
971
|
+
|
|
972
|
+
| User or role | Grants/revokes privileges in default spaces | Grants/revokes privileges in managed access spaces |
|
|
973
|
+
| --- | --- | --- |
|
|
974
|
+
| Dremio administrator | Yes | Yes |
|
|
975
|
+
| Owner of a shared space | Yes | Yes |
|
|
976
|
+
| Owner of a folder in a shared space | Yes | No |
|
|
977
|
+
| Owner of a view in a shared space | Yes | No |
|
|
978
|
+
| Owner of a function in a shared space | Yes | No |
|
|
979
|
+
| User or role with MANAGE GRANTS | Yes | Yes |
|
|
980
|
+
|
|
981
|
+
Managed access spaces do not impact:
|
|
982
|
+
|
|
983
|
+
* Any user home space
|
|
984
|
+
* Sources, including Nessie catalogs
|
|
985
|
+
* Global objects, such as scripts and user-defined functions
|
|
986
|
+
|
|
987
|
+
Managed access spaces do not override a MANAGE GRANT privilege granted at system scope.
|
|
988
|
+
|
|
989
|
+
The Dremio administrator can activate managed access spaces by setting the `security.access-control.managed-access-spaces.enabled` [support key](/current/help-support/support-settings/#support-keys) on the Support Settings page.
|
|
990
|
+
|
|
991
|
+
### View Delegation
|
|
992
|
+
|
|
993
|
+
View delegation means that the data in tables with restricted access may be available to other Dremio users by creating views. View delegation is the critical capability of the Dremio semantic layer that allows users to run queries without accessing the underlying tables and views directly.
|
|
994
|
+
|
|
995
|
+
The fundamental principles of view delegation include the following:
|
|
996
|
+
|
|
997
|
+
* The privileges of a view's owner determine whether the view can use dependent tables and views.
|
|
998
|
+
* Additional user access to a view is controlled by privilege grants directly on the view, forming a privilege chain from the view to the underlying table.
|
|
999
|
+
|
|
1000
|
+
note
|
|
1001
|
+
|
|
1002
|
+
A shared view selects from the underlying dataset using the view owner's permissions at the time of the view's last modification, even if the end user querying the view lacks privileges to modify the underlying table. This applies to each table on the data graph and chain of datasets.
|
|
1003
|
+
|
|
1004
|
+
View delegation is different from privilege assignment. View delegation is an implicit delegation of the SELECT privilege on underlying objects, which means that users who run queries on a view must have access privileges on the view but do not need privileges on underlying tables. Privilege assignment is an explicit delegation providing direct access to an object.
|
|
1005
|
+
|
|
1006
|
+
#### Example 1: View Delegation
|
|
1007
|
+
|
|
1008
|
+
`user1` has the SELECT privilege on `table1` and creates `view1` to filter and transform data in `table1`. `user2` asks for access privileges to run queries on `view1` as well. `user2` may obtain the SELECT privilege for `view1` from the following authorized users:
|
|
1009
|
+
|
|
1010
|
+
* By default, view owners such as `user1` can grant and revoke privileges to other users, as appropriate.
|
|
1011
|
+
* A limited set of users and roles, such as the space owner, can grant or revoke privileges in managed access spaces.
|
|
1012
|
+
* Dremio administrators or other users with the MANAGE GRANTS privilege can grant privileges to other users.
|
|
1013
|
+
|
|
1014
|
+
If access for `user2` is appropriate, the authorized user runs `GRANT SELECT ON VIEW view1 TO USER user2` to grant the SELECT privilege to `user2`. After `user2` obtains the SELECT privilege, they can run queries on `view1`, utilizing the privilege of `user1` as owner to `view1` to SELECT from `table1`.
|
|
1015
|
+
|
|
1016
|
+
| Object | `user1` | `user2` |
|
|
1017
|
+
| --- | --- | --- |
|
|
1018
|
+
| `view1` | OWNERSHIP | SELECT |
|
|
1019
|
+
| `table1` | SELECT | None |
|
|
1020
|
+
|
|
1021
|
+
*Privileges by user in Example 1*
|
|
1022
|
+
|
|
1023
|
+
The following table describes the actions that each user may perform based on their privileges:
|
|
1024
|
+
|
|
1025
|
+
| Task | Works for `user1` | Works for `user2` |
|
|
1026
|
+
| --- | --- | --- |
|
|
1027
|
+
| Use `view1` in queries | Yes, `user1` owns `view1` and has the SELECT privilege on `table1`. | Yes, `user2` has the SELECT privilege on `view1` and the owner of `view1` has the SELECT privilege on `table1`. |
|
|
1028
|
+
| Modify the query in `view1` | Yes, `user1` is the owner of `view1`. Ownership includes the ALTER privilege to modify the view definition. | No, `user2` is not the owner of `view1` and does not have the ALTER privilege. |
|
|
1029
|
+
| Use `table1` in queries | Yes, `user1` has the SELECT privilege on `table1`. | No, `user2` has no privileges on `table1` and cannot see it in the Dremio user interface. |
|
|
1030
|
+
|
|
1031
|
+
*Tasks by user in Example 1*
|
|
1032
|
+
|
|
1033
|
+
#### Example 2: View Delegation with Revoked Access to the Original Table
|
|
1034
|
+
|
|
1035
|
+
To continue the previous example, `user1` has SELECT access to `table1`, which gives `user1` access through `view1`. An administrator revokes the SELECT access of `user1` on `table1`.
|
|
1036
|
+
|
|
1037
|
+
| Object | `user1` | `user2` |
|
|
1038
|
+
| --- | --- | --- |
|
|
1039
|
+
| `view1` | OWNERSHIP | SELECT |
|
|
1040
|
+
| `table1` | None | None |
|
|
1041
|
+
|
|
1042
|
+
*Privileges by user in Example 2*
|
|
1043
|
+
|
|
1044
|
+
The following table describes the actions that each user may perform based on their privileges:
|
|
1045
|
+
|
|
1046
|
+
| Task | Works for `user1` | Works for `user2` |
|
|
1047
|
+
| --- | --- | --- |
|
|
1048
|
+
| Use `view1` in queries | No, `user1` no longer has SELECT on the underlying `table1`. | No, `user2` no longer has a chain of permission through `user1` to `table1`. |
|
|
1049
|
+
| Modify the query in `view1` | No, `user1` is the owner of `view1` but any attempts to edit `view1` will fail unless the references to `table1` are removed since `user1` can no longer access `table1`. | No, `user2` is not the owner of `view1` and does not possess the ALTER privilege. |
|
|
1050
|
+
| Use `table1` in queries | No, `user1` has no privileges on `table1`. | No, `user2` has no privileges on `table1`. |
|
|
1051
|
+
|
|
1052
|
+
*Tasks by user in Example 2*
|
|
1053
|
+
|
|
1054
|
+
## Privileges
|
|
1055
|
+
|
|
1056
|
+
Privileges refer to the defined levels of access or permissions that are assigned to roles or users within Dremio. Privileges determine the operations a user or role can perform on securable objects. Examples of privileges in Dremio include SELECT on a table or view, INSERT on a table, DELETE on a table, CREATE TABLE on a folder, and MANAGE GRANTS on any object.
|
|
1057
|
+
|
|
1058
|
+
The assignment of privileges to roles, or users, should be based on the principle of least privilege, where users or roles are given only the minimum privileges required to perform their tasks effectively.
|
|
1059
|
+
|
|
1060
|
+
Privileges can be managed using SQL, APIs, or the Dremio Console.
|
|
1061
|
+
|
|
1062
|
+
For more information, please refer to [Privileges](/current/security/rbac/privileges).
|
|
1063
|
+
|
|
1064
|
+
### Granting Privileges Using the Dremio Console
|
|
1065
|
+
|
|
1066
|
+
You can share catalog objects with others in your organization by granting privileges on the objects to users and roles as follows:
|
|
1067
|
+
|
|
1068
|
+
1. Locate the desired object.
|
|
1069
|
+
2. Click  or  depending on the object.
|
|
1070
|
+
3. In the object settings dialog, select **Privileges** from the settings sidebar.
|
|
1071
|
+
|
|
1072
|
+
note
|
|
1073
|
+
|
|
1074
|
+
For some object types, the settings dialog automatically opens to display the privilege settings, and you do not need to select the Privileges tab.
|
|
1075
|
+
|
|
1076
|
+
4. In the Privileges dialog, in the field under **Add User/Role**, enter the exact names of the users and roles to which you want to grant privileges.
|
|
1077
|
+
|
|
1078
|
+
note
|
|
1079
|
+
|
|
1080
|
+
Because all users are members of the PUBLIC role, you can use the PUBLIC role to grant privileges to all users.
|
|
1081
|
+
|
|
1082
|
+
5. Click **Add to Privileges**.
|
|
1083
|
+
|
|
1084
|
+
For each entry in the **Add User/Role** field that matches a user or role in Dremio, a record appears in the USERS/ROLES table.
|
|
1085
|
+
|
|
1086
|
+
6. In the USERS/ROLES table, toggle the checkbox for each privilege you want to grant for that user or role. For a description of the privilege, hover over the column name in the USERS/ROLES table. See the example below:
|
|
1087
|
+
|
|
1088
|
+

|
|
1089
|
+
|
|
1090
|
+
7. (Optional) Repeat steps 4-6 if you want to add more users or roles and grant them privileges.
|
|
1091
|
+
8. When finished, click **Save**.
|
|
1092
|
+
|
|
1093
|
+
### Revoking Privileges Using the Dremio Console
|
|
1094
|
+
|
|
1095
|
+
To revoke user and role privileges, complete the following steps:
|
|
1096
|
+
|
|
1097
|
+
1. Locate the desired object.
|
|
1098
|
+
2. Click  or  depending on the object.
|
|
1099
|
+
3. In the object settings dialog, select **Privileges** from the settings sidebar.
|
|
1100
|
+
|
|
1101
|
+
note
|
|
1102
|
+
|
|
1103
|
+
For some object types, the settings dialog automatically opens to display the privilege settings, and you do not need to select the Privileges tab.
|
|
1104
|
+
4. In the USERS/ROLES table, locate the desired user or role record. If the user or role is not listed, then they do not have specific privileges on the object.
|
|
1105
|
+
|
|
1106
|
+
* To revoke some but not all privileges for the user or role, clear the checkboxes in the columns for the privileges you wish to revoke.
|
|
1107
|
+
* To revoke all privileges for a user or role, click  next to the user or role name and select **Remove**.
|
|
1108
|
+
|
|
1109
|
+
For a description of the privilege, hover over the column name in the USERS/ROLES table. See the example below:
|
|
1110
|
+
|
|
1111
|
+

|
|
1112
|
+
|
|
1113
|
+
5. When finished, click **Save**.
|
|
1114
|
+
|
|
1115
|
+
note
|
|
1116
|
+
|
|
1117
|
+
If a user has a specific privilege on an object through their memberships in multiple roles and the privilege is revoked for one of the roles, the user retains the privilege until it is revoked on the same object for all roles to which the user belongs.
|
|
1118
|
+
|
|
1119
|
+
tip
|
|
1120
|
+
|
|
1121
|
+
You can also grant or revoke privileges using [SQL commands](/current/reference/sql/commands/rbac/) or [APIs](/current/reference/api/catalog/grants/).
|
|
1122
|
+
|
|
1123
|
+
### Granting Privileges Using SQL Commands
|
|
1124
|
+
|
|
1125
|
+
When granting privileges to users and roles with SQL commands, you may follow one of three methods: granting to a single dataset, granting to ALL DATASETS, and granting to a scope. Examples of these methods may be found under each section.
|
|
1126
|
+
|
|
1127
|
+
Each example includes an SQL command. For more information about command syntax, review the [Privileges (GRANT/REVOKE) SQL commands](/current/reference/sql/commands/rbac).
|
|
1128
|
+
|
|
1129
|
+
note
|
|
1130
|
+
|
|
1131
|
+
Because all users are members of the PUBLIC role, you can use the PUBLIC role to grant privileges to all users.
|
|
1132
|
+
|
|
1133
|
+
#### Granting to a Single Dataset
|
|
1134
|
+
|
|
1135
|
+
When you have a user that needs access to only one table and no other objects, then you would simply assign them privileges for that dataset (see the example scenario outlined below).
|
|
1136
|
+
|
|
1137
|
+
You should use this method if you want to restrict a user's access to any other existing or future datasets.
|
|
1138
|
+
|
|
1139
|
+
note
|
|
1140
|
+
|
|
1141
|
+
If you're granting the user access to a table, then remember that they'll be able to create views based on that dataset, which that user can then grant access to other users.
|
|
1142
|
+
|
|
1143
|
+
##### Example: Single Dataset
|
|
1144
|
+
|
|
1145
|
+
You have a user that you only want to give access to an individual table. You would need to navigate to the *Privileges* screen from that dataset's settings and grant the user the `SELECT` privilege, or perform the following command from the SQL Editor:
|
|
1146
|
+
|
|
1147
|
+
Single dataset example
|
|
1148
|
+
|
|
1149
|
+
```
|
|
1150
|
+
GRANT SELECT ON TABLE TableA1 TO USER user1
|
|
1151
|
+
```
|
|
1152
|
+
|
|
1153
|
+
The image below illustrates the objects `user1` now has access to.
|
|
1154
|
+
|
|
1155
|
+

|
|
1156
|
+
|
|
1157
|
+
This restricts `user1` so that they may only access the `TableA1` table, not any other datasets contained in the same folder. However, `user1` may still create views based on `TableA1`.
|
|
1158
|
+
|
|
1159
|
+
#### Granting to ALL DATASETS
|
|
1160
|
+
|
|
1161
|
+
When you have a user that needs access to all existing datasets, then you would use the SQL syntax `ON ALL DATASETS` (see the example scenario outlined below). This gives the user access to all existing datasets. The user would not, however, automatically receive access to any future datasets created by other users.
|
|
1162
|
+
|
|
1163
|
+
You should use this method of privilege assignment if you want to restrict a user's access to parent objects, but still wish for them to have access to all existing datasets.
|
|
1164
|
+
|
|
1165
|
+
##### Example: All Datasets
|
|
1166
|
+
|
|
1167
|
+
You have a specific user that needs access to all datasets in a specific folder, but they do not require privileges for the folders containing these tables. You would then execute the following command from the SQL Editor:
|
|
1168
|
+
|
|
1169
|
+
All datasets example
|
|
1170
|
+
|
|
1171
|
+
```
|
|
1172
|
+
GRANT SELECT ON ALL DATASETS IN SYSTEM TO USER user1
|
|
1173
|
+
```
|
|
1174
|
+
|
|
1175
|
+
The image below illustrates the objects `user1` now has access to.
|
|
1176
|
+
|
|
1177
|
+

|
|
1178
|
+
|
|
1179
|
+
This command restricts the scope of `user1` to all datasets presently found in `source1`, such as `TableC1` and `TableD1`. Should additional datasets be created in the future, `user1` will not have access to them.
|
|
1180
|
+
|
|
1181
|
+
#### Granting to a Scope
|
|
1182
|
+
|
|
1183
|
+
When you want to grant a user access to a parent object, such as a folder, this will also grant the user access to any datasets contained (see the example scenario outlined below).
|
|
1184
|
+
|
|
1185
|
+
You should use this method of privilege management if you wanted to grant a user access to all existing and future datasets contained under a parent object.
|
|
1186
|
+
|
|
1187
|
+
##### Example: Scope
|
|
1188
|
+
|
|
1189
|
+
This method grants a user access to all existing and future datasets contained under a specified object. To accomplish this, you need to navigate to the *Privileges* screen from that folder's settings and grant the user the `SELECT` privilege, or execute the following command from the SQL Editor:
|
|
1190
|
+
|
|
1191
|
+
Scope example
|
|
1192
|
+
|
|
1193
|
+
```
|
|
1194
|
+
GRANT SELECT ON FOLDER Folder3 TO USER user1
|
|
1195
|
+
```
|
|
1196
|
+
|
|
1197
|
+
The image below illustrates the objects `user1` now has access to.
|
|
1198
|
+
|
|
1199
|
+

|
|
1200
|
+
|
|
1201
|
+
This grants `user1` the `SELECT` privilege on `Folder3`, which means they now have access to all existing and future datasets contained in that folder and its subfolders.
|
|
1202
|
+
|
|
1203
|
+
Was this page helpful?
|
|
1204
|
+
|
|
1205
|
+
[Previous
|
|
1206
|
+
|
|
1207
|
+
Personal Access Tokens](/current/security/authentication/personal-access-tokens)[Next
|
|
1208
|
+
|
|
1209
|
+
Privileges](/current/security/rbac/privileges)
|
|
1210
|
+
|
|
1211
|
+
* Object Hierarchy
|
|
1212
|
+
* Inheritance
|
|
1213
|
+
* Scope
|
|
1214
|
+
+ Current vs. Future Objects
|
|
1215
|
+
* Ownership
|
|
1216
|
+
+ Managed Access Spaces
|
|
1217
|
+
+ View Delegation
|
|
1218
|
+
* Privileges
|
|
1219
|
+
+ Granting Privileges Using the Dremio Console
|
|
1220
|
+
+ Revoking Privileges Using the Dremio Console
|
|
1221
|
+
+ Granting Privileges Using SQL Commands
|
|
1222
|
+
|
|
1223
|
+
---
|
|
1224
|
+
|
|
1225
|
+
# Source: https://docs.dremio.com/current/security/integrations/lake-formation/
|
|
1226
|
+
|
|
1227
|
+
Version: current [26.x]
|
|
1228
|
+
|
|
1229
|
+
On this page
|
|
1230
|
+
|
|
1231
|
+
# Integrate with AWS Lake Formation Enterprise
|
|
1232
|
+
|
|
1233
|
+
Lake Formation provides access controls for datasets in the AWS Glue Data Catalog and is used to define security policies from a centralized location that may be shared across multiple tools. Dremio may be configured to refer to this service to verify access for a user to contained datasets.
|
|
1234
|
+
|
|
1235
|
+
## Requirements
|
|
1236
|
+
|
|
1237
|
+
* [Dremio v19.0+](/current/release-notes/version-1900-release-notes/#lake-formation)
|
|
1238
|
+
* Identity Provider service (e.g., Microsoft Entra ID, [LDAP](/current/security/authentication/ldap/)) set up
|
|
1239
|
+
+ (Recommended) [SAML connection](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html) with AWS
|
|
1240
|
+
* [Permissions set up in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)
|
|
1241
|
+
* [AWS Glue Data Catalog](/current/data-sources/lakehouse-catalogs/aws-glue-catalog/) connected to Dremio
|
|
1242
|
+
+ User and Group ARN prefixes specified and enabled
|
|
1243
|
+
|
|
1244
|
+
## Lake Formation Workflow
|
|
1245
|
+
|
|
1246
|
+
When Lake Formation is properly configured, Dremio adheres to the following workflow each time an end user attempts to access, edit, or query datasets with managed privileges:
|
|
1247
|
+
|
|
1248
|
+
1. Dremio enforces [access control](/current/security/rbac/). See Configuring Sources for Lake Formation below for access control recommendations.
|
|
1249
|
+
2. Dremio checks each table to determine if those stored in the AWS Glue source are configured to use Lake Formation for security.
|
|
1250
|
+
* If one or more datasets leverage Lake Formation, Dremio determines the user ARNs to use when checking against Lake Formation.
|
|
1251
|
+
3. Dremio queries Lake Formation to determine a user's access level to the datasets using the user/group ARNs.
|
|
1252
|
+
* If the user has access to the datasets specified within the query's scope, the query proceeds.
|
|
1253
|
+
* If the user lacks access, the query fails with a permission error.
|
|
1254
|
+
|
|
1255
|
+
## Demoing Lake Formation
|
|
1256
|
+
|
|
1257
|
+
[Demo files and a walkthrough](/current/security/integrations/lake-formation/lake-formation-demo/) are available to help you test Lake Formation functionality. The demo files and walkthrough are intended for users who have not configured all of the requirements listed above.
|
|
1258
|
+
|
|
1259
|
+
## Configuring Sources for Lake Formation
|
|
1260
|
+
|
|
1261
|
+
Lake Formation integration is dependent on the mapping of user/group names in Dremio to the IAM user/group ARNs used by AWS.
|
|
1262
|
+
|
|
1263
|
+
To configure an existing or new AWS Glue source, you must set the following options:
|
|
1264
|
+
|
|
1265
|
+
1. From your existing source or upon creating an **AWS Glue Catalog** source, navigate to the Advanced Options tab.
|
|
1266
|
+
2. Enable **Enforce AWS Lake Formation access permissions on datasets**.
|
|
1267
|
+
3. Fill in the user and group prefix settings as instructed with the [Lake Formation Permissions Reference](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html). For example, if you are using a SAML provider in AWS:
|
|
1268
|
+
* User prefix with SAML: `arn:aws:iam::<AWS_ACCOUNT_ID>:saml-provider/<PROVIDER_NAME_IN_AWS>:user/`
|
|
1269
|
+
* Group prefix with SAML: `arn:aws:iam::<AWS_ACCOUNT_ID>:saml-provider/<PROVIDER_NAME_IN_AWS>:group/`
|
|
1270
|
+
|
|
1271
|
+
note
|
|
1272
|
+
|
|
1273
|
+
Best Practice: On the Privileges tab, we recommend enabling the **Select** privilege for **All Users** to allow non-admin users to access the AWS Glue source from Dremio.
|
|
1274
|
+
4. Click **Save**.
|
|
1275
|
+
|
|
1276
|
+
## Lake Formation Cell-Level Security
|
|
1277
|
+
|
|
1278
|
+
Dremio supports AWS Lake Formation [cell-level security](https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html) with row-level access permissions based on AWS Lake Formation [PartiQL expressions](https://docs.aws.amazon.com/lake-formation/latest/dg/partiql-support.html). If the user does not have read permissions on a column or cell, Dremio masks the data in that column or cell with a `NULL` value.
|
|
1279
|
+
|
|
1280
|
+
To speed up query planning, Dremio uses the AWS Lake Formation permissions cache for each table. By default, the cache is enabled and reuses previously loaded permissions for up to 3600 seconds (1 hour).
|
|
1281
|
+
|
|
1282
|
+
Use [support keys](/current/help-support/support-settings/#support-keys) to disable the cache or customize the cache time-to-live (TTL):
|
|
1283
|
+
|
|
1284
|
+
* `dremio.glue.lakeformation.cache.enable`: To disable permissions caching, set to `FALSE`.
|
|
1285
|
+
* `dremio.glue.lakeformation.cache.ttl`: To specify a TTL for the cache instead of the default 3600 seconds, set to the desired value in seconds.
|
|
1286
|
+
|
|
1287
|
+
After you change the value for either support key, you must restart the coordinator node in your Dremio cluster for the change to take effect.
|
|
1288
|
+
|
|
1289
|
+
Was this page helpful?
|
|
1290
|
+
|
|
1291
|
+
[Previous
|
|
1292
|
+
|
|
1293
|
+
Integrations](/current/security/integrations/)[Next
|
|
1294
|
+
|
|
1295
|
+
Lake Formation Demo](/current/security/integrations/lake-formation/lake-formation-demo)
|
|
1296
|
+
|
|
1297
|
+
* Requirements
|
|
1298
|
+
* Lake Formation Workflow
|
|
1299
|
+
* Demoing Lake Formation
|
|
1300
|
+
* Configuring Sources for Lake Formation
|
|
1301
|
+
* Lake Formation Cell-Level Security
|
|
1302
|
+
|
|
1303
|
+
---
|
|
1304
|
+
|
|
1305
|
+
# Source: https://docs.dremio.com/current/security/integrations/privacera/
|
|
1306
|
+
|
|
1307
|
+
Version: current [26.x]
|
|
1308
|
+
|
|
1309
|
+
On this page
|
|
1310
|
+
|
|
1311
|
+
# Integrate with Privacera Enterprise
|
|
1312
|
+
|
|
1313
|
+
Dremio and Privacera have partnered to provide an integration that allows organizations to implement fine-grained access controls on their open data lakehouse. The integration provides the following capabilities:
|
|
1314
|
+
|
|
1315
|
+
* **Privacera Policy Sync:** Data governance and access control policies in Privacera are translated into SQL and pushed to Dremio using Dremio’s native RBAC and fine-grained access control, ensuring that data remains secure and compliant with the centrally-defined policies in Privacera. You can learn more about how this works in Privacera's [Dremio connector](https://docs.privacera.com/connectors/dremio/) documentation.
|
|
1316
|
+
* **Dremio Auditing and Query Tracking:** Audit details related to user-executed queries in Dremio can be accessed through the Jobs page in the Dremio console. Job lists and job details provide insights into user-executed queries. See [Viewing Jobs](/current/admin/monitoring/jobs/) for more information.
|
|
1317
|
+
* **Support for all Data Sources:** The Privacera integration supports all Dremio data sources. See [Connect to Your Data](/current/data-sources/) for a full list of sources.
|
|
1318
|
+
|
|
1319
|
+
note
|
|
1320
|
+
|
|
1321
|
+
When using the Privacera plugin for Dremio, no additional or external tools should be used for the policy synchronization between Privacera and Dremio.
|
|
1322
|
+
|
|
1323
|
+
## Prerequisites
|
|
1324
|
+
|
|
1325
|
+
Ensure that you meet the following prerequisites before you begin the integration:
|
|
1326
|
+
|
|
1327
|
+
* An on-premise or SaaS Privacera Manager host that is running Privacera services
|
|
1328
|
+
* A deployment of Dremio Enterprise Edition 24.1 or later -- Community Edition and Dremio Cloud *are not* supported at this time
|
|
1329
|
+
|
|
1330
|
+
## Installation
|
|
1331
|
+
|
|
1332
|
+
Refer to the [Privacera documentation](https://docs.privacera.com/latest/platform/pm-ig/dremio/) to learn how to install and configure Privacera's plugin for Dremio.
|
|
1333
|
+
|
|
1334
|
+
note
|
|
1335
|
+
|
|
1336
|
+
After installing the Privacera plugin, ensure that the **Enable external authorization plugin** option is selected under **Settings > Advanced Options** on all sources that should utilize the integration with Privacera. After updating any source configurations, restart Dremio.
|
|
1337
|
+
|
|
1338
|
+
Was this page helpful?
|
|
1339
|
+
|
|
1340
|
+
[Previous
|
|
1341
|
+
|
|
1342
|
+
Lake Formation Demo](/current/security/integrations/lake-formation/lake-formation-demo)[Next
|
|
1343
|
+
|
|
1344
|
+
Apache Ranger](/current/security/integrations/row-column-policies-ranger)
|
|
1345
|
+
|
|
1346
|
+
* Prerequisites
|
|
1347
|
+
* Installation
|
|
1348
|
+
|
|
1349
|
+
---
|
|
1350
|
+
|
|
1351
|
+
# Source: https://docs.dremio.com/current/security/integrations/row-column-policies-ranger/
|
|
1352
|
+
|
|
1353
|
+
Version: current [26.x]
|
|
1354
|
+
|
|
1355
|
+
On this page
|
|
1356
|
+
|
|
1357
|
+
# Apache Ranger: Row-Level Filtering & Column-Masking Enterprise
|
|
1358
|
+
|
|
1359
|
+
Dremio offers both Apache Ranger security policy support and built-in SQL functions for applying row-level filtering and column-masking.
|
|
1360
|
+
|
|
1361
|
+
## Column-Masking Overview
|
|
1362
|
+
|
|
1363
|
+
Column-masking is a secure and flexible resource-based solution to hiding sensitive information rapidly on a Hive source. Via Apache-Ranger-based security policies or using Dremio's built-in masking, you may mask or scramble private data at the column-level in a dynamic fashion for Hive query outputs. Utilizing masking methods, you may set a column to only display the year of a data, the first or last four digits of a value, and more.
|
|
1364
|
+
|
|
1365
|
+
Utilizing services like Apache Ranger allow you to apply access policies to a Hive source so that filters may be based upon specific users, groups, and conditions. Thus, sensitive information never leaves the source and no changes are required by the source. This likewise removes the need to produce a secondary set of data with protected information manually removed.
|
|
1366
|
+
|
|
1367
|
+
The following conditions apply to column-masking:
|
|
1368
|
+
|
|
1369
|
+
* Multiple masking types are available
|
|
1370
|
+
* Masks may be applied to users, groups, and conditions
|
|
1371
|
+
* Each column must have its own masking policy
|
|
1372
|
+
* Masks are evaluated in the order they are presented in a query or on a security policy
|
|
1373
|
+
* Wildcard matching is not supported
|
|
1374
|
+
|
|
1375
|
+
For Apache Ranger implementations, additional use cases may be found at [3. Use cases: data-masking](https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive).
|
|
1376
|
+
|
|
1377
|
+
### Row-Level Filtering Overview
|
|
1378
|
+
|
|
1379
|
+
Row-level filtering both simplifies queries and adds a layer of security to the data returned for user/role queries. Either SQL functions or Apache-Ranger-based security policies limit access down to the dataset layer, which then affects how queries are handled upon execution. Row-level security on supported tables helps reduce exposure of sensitive data to specific users or groups. Row segmentation and restricted access together ensures that upon query completion, only specific rows based on both the user's characteristics (username or group/role) and the runtime context of the query are displayed from Dremio's SQL Editor.
|
|
1380
|
+
|
|
1381
|
+
Row-level restrictions may be set by user, group/role, and other conditions (conditions only available for Ranger implementations, as described further under Row Filter Conditions).
|
|
1382
|
+
|
|
1383
|
+
The following examples serve as use cases where row-level filtering would prove beneficial:
|
|
1384
|
+
|
|
1385
|
+
* Hospitals may create security policies enabling 1) doctors to view only the rows containing their patients, 2) insurance claims adjusters to view only rows pertaining to their site/facility, and 3) medical billing coders to only view rows pertaining to specific medical disciplines.
|
|
1386
|
+
* Financial institutes may create policies restricting access to rows pertaining to a user's specific division, geographic location or site, or role, meaning only employees in Collections would only be allowed to see outstanding unpaid claims, collection payment plans, and so on.
|
|
1387
|
+
* Organizations utilizing multi-tenant applications may use row-level filters to set logical separations of each tenant's data, thus ensuring a tenant only has access to their own data rows.
|
|
1388
|
+
|
|
1389
|
+
For Apache Ranger implementations, additional use cases may be found at [2. Use cases: row-level filters](https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive).
|
|
1390
|
+
|
|
1391
|
+
## Using Apache Ranger Security Policies
|
|
1392
|
+
|
|
1393
|
+
For organizations configured to use [Apache Ranger](/current/data-sources/lakehouse-catalogs/hive/hive-ranger) and Hive sources, support automatically exists in Dremio to handle security policies set from Ranger. Based on the user, group/role, and conditions set externally, Dremio automatically applies restrictions to a user's query and applies row-level filtering and column-masking in the background. Upon query completion, you will then only see the results for rows and columns you have access to, without any visual indication that rows have been removed from view.
|
|
1394
|
+
|
|
1395
|
+
### Requirements
|
|
1396
|
+
|
|
1397
|
+
* [Dremio 20.0+](/current/release-notes/version-200-release/#ranger-row-filtering--column-masking)
|
|
1398
|
+
* [Apache Ranger](/current/help-support/advanced-topics/hive-ranger/) configured
|
|
1399
|
+
+ Admin privileges to add access control policies
|
|
1400
|
+
* [Hive source](/current/data-sources/lakehouse-catalogs/hive/)
|
|
1401
|
+
|
|
1402
|
+
## How It Works
|
|
1403
|
+
|
|
1404
|
+
Ranger-based row filtering and column-masking functions as an "implicit view," replacing a table/view reference in an SQL statement prior to processing the statement. This implicit view is created through an examination of user permissions. For example, consider a user with access to `table_1`, while also having a mask applied on `table_1.column_1`, effectively translating the column to "xxx." Simultaneously, a row filter exists for `table_1.column_2`.
|
|
1405
|
+
|
|
1406
|
+
The original query would appear as:
|
|
1407
|
+
|
|
1408
|
+
Original query
|
|
1409
|
+
|
|
1410
|
+
```
|
|
1411
|
+
SELECT column_1
|
|
1412
|
+
FROM table_1
|
|
1413
|
+
WHERE column_3
|
|
1414
|
+
```
|
|
1415
|
+
|
|
1416
|
+
With both column-masking and row-level filtering policies applied from Ranger, the query above is rewritten to the following:
|
|
1417
|
+
|
|
1418
|
+
Query with column-masking and row-level filtering policies
|
|
1419
|
+
|
|
1420
|
+
```
|
|
1421
|
+
WITH filtered_and_masked_table_1
|
|
1422
|
+
AS (
|
|
1423
|
+
SELECT 'xxx' AS column_1, column_2, column_3
|
|
1424
|
+
FROM table_1
|
|
1425
|
+
WHERE column_2
|
|
1426
|
+
)
|
|
1427
|
+
SELECT column_1
|
|
1428
|
+
FROM filtered_and_masked_table_1
|
|
1429
|
+
WHERE column_3;
|
|
1430
|
+
```
|
|
1431
|
+
|
|
1432
|
+
## Setting Policies in Apache Ranger
|
|
1433
|
+
|
|
1434
|
+
For organizations currently utilizing Apache Ranger and configured to apply policies to Dremio, the application of row-level filtering and column-masking is automatic. However, in order to apply these security measures, you must also create security policies from Ranger, which will then propagate down to Dremio when the affected users perform a query.
|
|
1435
|
+
|
|
1436
|
+
To create a security policy in Apache Ranger:
|
|
1437
|
+
|
|
1438
|
+
1. Navigate to the *Service Manager* page, and then select the desired **Hive Service**.
|
|
1439
|
+
2. Click the **Column Masking** or **Row Level Filter** tab.
|
|
1440
|
+
|
|
1441
|
+

|
|
1442
|
+
|
|
1443
|
+
3. Click **Add New Policy**.
|
|
1444
|
+
|
|
1445
|
+
Now you are at the **Add Policy** screen. The sections below describe the elements contained on that page.
|
|
1446
|
+
|
|
1447
|
+
### Policy Details
|
|
1448
|
+
|
|
1449
|
+
The following table describes the **Policy Details** section of the *Create Policy* screen.
|
|
1450
|
+
|
|
1451
|
+
| Field | Required | Description |
|
|
1452
|
+
| --- | --- | --- |
|
|
1453
|
+
| Policy Name | YES | The name of the policy. This value cannot be duplicated in another policy. |
|
|
1454
|
+
| Policy Label | | Tags to help categorize and make the policy more searchable. |
|
|
1455
|
+
| Hive Database | YES | The name of the database(s) to which this policy applies. The field will display auto-complete options based on what matches the current entered value. The database must be a parent to any specified table(s) below, otherwise it will fail to apply. |
|
|
1456
|
+
| Hive Table | YES | The name of the table(s) to apply the policy toward. Please ensure the tables are associated with the database(s) specified above, otherwise they will not be accessible. |
|
|
1457
|
+
| Description | | A description of the policy to explain its intended purpose, its audience, and any other relevant details. |
|
|
1458
|
+
| enabled/disabled | YES | Determines whether the specific policy apply to the specified users, groups/roles, and conditions. If disabled, the security policy will not affect user queries. |
|
|
1459
|
+
| normal/override | YES | Controls how the policy is prioritized against other existing security policies. If set to **override**, this policy will ignore other policies that may restrict or grant access beyond the scope specified here. |
|
|
1460
|
+
| Audit Logging | YES | Controls whether auditing is enabled and is set to **YES** by default. Auditing tracks all user actions impacted by this policy. |
|
|
1461
|
+
|
|
1462
|
+
### Row Filter Conditions
|
|
1463
|
+
|
|
1464
|
+
The following table describes the **Row Filter Conditions** section of the *Create Policy* screen.
|
|
1465
|
+
|
|
1466
|
+

|
|
1467
|
+
|
|
1468
|
+
| Field | Description |
|
|
1469
|
+
| --- | --- |
|
|
1470
|
+
| Select Group | The group(s) of users to which this policy applies. The public group will apply to all users. If no group is specified, a user must be provided. |
|
|
1471
|
+
| Select User | The individual user(s) to which this policy applies. If no user is specified, a group must be provided. |
|
|
1472
|
+
| Access Types | The action which the specified group(s) or user(s) may utilize from the Dremio SQL Editor. Currently, the only type available is select. This is used in tandem with the WHERE clause as specified in the Row Level Filter field. |
|
|
1473
|
+
| Row Level Filter | A valid WHERE clause as entered in the Enter filter expression pop-up upon clicking the Add Row Filter button. To allow full SELECT access to users without row-level filtering, do not click this button. Filters are applied based on top-down order, meaning the filter at the top is applied first, then the second filter, and so on. |
|
|
1474
|
+
|
|
1475
|
+
### Mask Conditions
|
|
1476
|
+
|
|
1477
|
+

|
|
1478
|
+
|
|
1479
|
+
| Field | Description |
|
|
1480
|
+
| --- | --- |
|
|
1481
|
+
| Select Group | The group(s) of users to which this policy applies. The public group will apply to all users. If no group is specified, a user must be provided. |
|
|
1482
|
+
| Select User | The individual user(s) to which this policy applies. If no user is specified, a group must be provided. |
|
|
1483
|
+
| Access Types | The action which the specified group(s) or user(s) may utilize from the Dremio SQL Editor. Currently, the only type available is select. This is used in tandem with the WHERE clause as specified in the Row Level Filter field. |
|
|
1484
|
+
| Select Masking Type | The type of column-masking behavior to apply to the associated users/groups when they query the table specified on this policy. * **Redact -** Replaces all alphabetic characters with `x` and all numeric characters with `n`. * **Partial mask: show last 4 -** Displays only the last four characters of the full column value's. * **Partial mask: show first 4 -** Displays only the first four characters of the full column value's. * **Hash -** Replaces all characters with a hash of the entire cell's value. * **Nullify -** Replaces all characters in the cell with a `NULL` value. * **Unmasked (retain original value) -** No masking is applied to the cell. * **Date: show only year -** Displays the year portion of a date string, defaulting the month and day to `01/01`. * **Custom -** Specifies a custom column masked value or valid Dremio expression. Custom masking may not use [Hive UDFs]<https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#LanguageManualUDF-DataMaskingFunctions>. Masks are applied based on top-down order, meaning the mask at the top is applied first, then the second mask, and so on. |
|
|
1485
|
+
|
|
1486
|
+
## Adding a Row-Level Filter Policy
|
|
1487
|
+
|
|
1488
|
+
This section outlines how to create a row-level filter policy from the Apache Ranger console.
|
|
1489
|
+
|
|
1490
|
+
For additional instructions and information about row-level filtering, see [Row-level filtering and column-masking using Apache Ranger policies in Apache Hive](https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive).
|
|
1491
|
+
|
|
1492
|
+
To create a policy that enforces row-level access control, perform the following steps:
|
|
1493
|
+
|
|
1494
|
+
1. From the Apache Ranger console, navigate to the *Serivce Manager* page, and then select the desired **Hive Service**.
|
|
1495
|
+
2. Click the **Row Level Filter** tab.
|
|
1496
|
+
|
|
1497
|
+

|
|
1498
|
+
|
|
1499
|
+
3. Click **Add New Policy**.
|
|
1500
|
+
4. From the *Create Policy* page, provide values for the **Policy Details** and **Row Filter Conditions** sections.
|
|
1501
|
+
5. Add any desired conditions, or else leave the **Row Filter Conditions** section blank to apply no filtering.
|
|
1502
|
+
|
|
1503
|
+

|
|
1504
|
+
|
|
1505
|
+
6. To move a condition under the **Row Filter Conditions** section, click the dotted icon on the left-hand side of the row, and then drag it to the desired new location,
|
|
1506
|
+
7. Click **Add** to save the new policy.
|
|
1507
|
+
|
|
1508
|
+
## Adding a Column-Masking Policy
|
|
1509
|
+
|
|
1510
|
+
This section outlines how to create a column-masking policy from the Apache Ranger console.
|
|
1511
|
+
|
|
1512
|
+
For additional instructions and information about column-masking, see [Row-level filtering and column-masking using Apache Ranger policies in Apache Hive](https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive).
|
|
1513
|
+
|
|
1514
|
+
To create a policy that enforces row-level access control, perform the following steps:
|
|
1515
|
+
|
|
1516
|
+
1. From the Apache Ranger console, navigate to the *Serivce Manager* page, and then select the desired **Hive Service**.
|
|
1517
|
+
2. Click the **Row Level Filter** tab.
|
|
1518
|
+
|
|
1519
|
+

|
|
1520
|
+
|
|
1521
|
+
3. Click **Add New Policy**.
|
|
1522
|
+
4. From the *Create Policy* page, provide values for the **Policy Details** and **Mask Conditions** sections.
|
|
1523
|
+
5. Create any desired masking conditions under the **Mask Conditions** section, or else select **Unmasked (retain original value)** to not apply masking for a user or group.
|
|
1524
|
+
|
|
1525
|
+

|
|
1526
|
+
|
|
1527
|
+
5. To move a condition under the **Mask Conditions** section, click the dotted icon on the left-hand side of the row, and then drag it to the desired new location,
|
|
1528
|
+
6. Click **Add** to save the new policy.
|
|
1529
|
+
|
|
1530
|
+
## Using Dremio's Built-In Filtering/Masking
|
|
1531
|
+
|
|
1532
|
+
For organizations not using Apache Ranger, Dremio offers column-masking and row-level filtering for views via SQL functions. However, this implementation is limited in comparison to the security policies possible with [Ranger implementations](/current/help-support/advanced-topics/hive-ranger/). Where possible, utilize this service to enforce row-level permissions and column-masking as described above.
|
|
1533
|
+
|
|
1534
|
+
note
|
|
1535
|
+
|
|
1536
|
+
We recommend using [Dremio 20.0+](/current/release-notes/version-200-release/#ranger-row-filtering--column-masking) in tandem with Apache Ranger to apply [user/role-based](/current/security/rbac/) security policies across all datasets while querying a table/view. Otherwise, you may utilize Dremio's built-in SQL functions (as describe below) to manually enforce filtering and masking.
|
|
1537
|
+
|
|
1538
|
+
### Creating a View with Column-Masking
|
|
1539
|
+
|
|
1540
|
+
By using the [query\_user()](/current/reference/sql/sql-functions/functions/QUERY_USER/) or `is_member()` SQL functions, a view can be configured manually to allow selective masking of columns for different [users/roles](/current/security/rbac/) without the need to create multiple datasets.
|
|
1541
|
+
|
|
1542
|
+
The following is a sample SQL command for a view using column-masking syntax:
|
|
1543
|
+
|
|
1544
|
+
Example for view using column-masking
|
|
1545
|
+
|
|
1546
|
+
```
|
|
1547
|
+
SELECT
|
|
1548
|
+
CASE
|
|
1549
|
+
WHEN query_user() IN ('dave','mike') OR is_member('Accounting') THEN SSN
|
|
1550
|
+
ELSE CONCAT('XXX-XX-',SUBSTR(SSN,8,4))
|
|
1551
|
+
END
|
|
1552
|
+
FROM ss.crm.dbo.employees
|
|
1553
|
+
```
|
|
1554
|
+
|
|
1555
|
+
The SQL function `is_member()` is case-insensitive by default. This may be circumvented by adding a boolean `is_member(groupname, <case-sensitivity boolean>)` to control case-sensitivity. Simply set it to `true` to enable case-sensitivity or `false` to disable. If omitted from the SQL command, the boolean defaults to `false`.
|
|
1556
|
+
|
|
1557
|
+
### Creating a View with Row-Level Permissions
|
|
1558
|
+
|
|
1559
|
+
By using the [query\_user()](/current/reference/sql/sql-functions/functions/QUERY_USER/) or `is_member()` SQL functions, a view can be configured to allow manual selective filtering of rows for different [users/roles](/current/security/rbac/) without the need to create multiple datasets.
|
|
1560
|
+
|
|
1561
|
+
The following is a sample SQL command for a view using row-level filtering syntax:
|
|
1562
|
+
|
|
1563
|
+
Example for view using row-level filtering
|
|
1564
|
+
|
|
1565
|
+
```
|
|
1566
|
+
SELECT *
|
|
1567
|
+
FROM mongo.view.business
|
|
1568
|
+
WHERE
|
|
1569
|
+
(state = 'NV' AND query_user() IN ('dave','mike'))
|
|
1570
|
+
OR
|
|
1571
|
+
(state = 'CA' AND is_member('Marketing'))
|
|
1572
|
+
```
|
|
1573
|
+
|
|
1574
|
+
The SQL function `is_member()` is case-insensitive by default. This may be circumvented by adding a boolean `is_member(groupname, <case-sensitivity boolean>)` to control case-sensitivity. Simply set it to `true` to enable case-sensitivity or `false` to disable. If omitted from the SQL command, the boolean defaults to `false`.
|
|
1575
|
+
|
|
1576
|
+
Was this page helpful?
|
|
1577
|
+
|
|
1578
|
+
[Previous
|
|
1579
|
+
|
|
1580
|
+
Privacera](/current/security/integrations/privacera)[Next
|
|
1581
|
+
|
|
1582
|
+
Secrets Management](/current/security/secrets-management/)
|
|
1583
|
+
|
|
1584
|
+
* Column-Masking Overview
|
|
1585
|
+
+ Row-Level Filtering Overview
|
|
1586
|
+
* Using Apache Ranger Security Policies
|
|
1587
|
+
+ Requirements
|
|
1588
|
+
* How It Works
|
|
1589
|
+
* Setting Policies in Apache Ranger
|
|
1590
|
+
+ Policy Details
|
|
1591
|
+
+ Row Filter Conditions
|
|
1592
|
+
+ Mask Conditions
|
|
1593
|
+
* Adding a Row-Level Filter Policy
|
|
1594
|
+
* Adding a Column-Masking Policy
|
|
1595
|
+
* Using Dremio's Built-In Filtering/Masking
|
|
1596
|
+
+ Creating a View with Column-Masking
|
|
1597
|
+
+ Creating a View with Row-Level Permissions
|
|
1598
|
+
|
|
1599
|
+
---
|
|
1600
|
+
|
|
1601
|
+
# Source: https://docs.dremio.com/current/security/authentication/identity-providers/ldap
|
|
1602
|
+
|
|
1603
|
+
Version: current [26.x]
|
|
1604
|
+
|
|
1605
|
+
On this page
|
|
1606
|
+
|
|
1607
|
+
# LDAP Enterprise
|
|
1608
|
+
|
|
1609
|
+
## Configuring Dremio for LDAP
|
|
1610
|
+
|
|
1611
|
+
To configure Dremio for LDAP, perform the following steps:
|
|
1612
|
+
|
|
1613
|
+
1. Create a new `ad.json` file that contains your LDAP server configuration. See the LDAP Properties below for more information.
|
|
1614
|
+
2. Adding your configuration:
|
|
1615
|
+
|
|
1616
|
+
* Kubernetes
|
|
1617
|
+
* Standalone
|
|
1618
|
+
|
|
1619
|
+
1. Update the `coordinator.web.auth.type` configuration in your `values-overrides.yaml` with the value `ldap`. See the configuration of [Identity Providers](/current/deploy-dremio/configuring-kubernetes/#identity-provider).
|
|
1620
|
+
2. Optionally, to configure Dremio to use TLS when connecting to LDAP, perform the following steps:
|
|
1621
|
+
|
|
1622
|
+
1. Configure the LDAP `connectionMode` in `ad.json` for the required level of TLS functionality. See LDAP Connection Mode.
|
|
1623
|
+
2. To configure a truststore for the validation of TLS LDAP certificates, add the following to `values-override.yaml`
|
|
1624
|
+
|
|
1625
|
+
New configuration for TLS to LDAP
|
|
1626
|
+
|
|
1627
|
+
```
|
|
1628
|
+
dremio:
|
|
1629
|
+
advancedConfigs:
|
|
1630
|
+
trustStore:
|
|
1631
|
+
enabled: true
|
|
1632
|
+
password: "changeit"
|
|
1633
|
+
```
|
|
1634
|
+
3. Add the `ad.json` file to your Dremio deployment. This can be done in one of two ways:
|
|
1635
|
+
|
|
1636
|
+
**Method 1 (Preferred)**
|
|
1637
|
+
|
|
1638
|
+
* Add the content of your JSON file into your `values-override.yaml` via the `ssoFile` option. This method is detailed in the [Identity Provider](/current/deploy-dremio/configuring-kubernetes/#identity-provider) section.
|
|
1639
|
+
* If TLS with a custom truststore is required, use the `configBinaries` option in your `values-overrides.yaml` and pass in the content of your `.jks` truststore file. For more details, see [Additional Config Binary Files](/current/deploy-dremio/configuring-kubernetes/#additional-config-binary-files).
|
|
1640
|
+
|
|
1641
|
+
**Method 2**
|
|
1642
|
+
|
|
1643
|
+
* Perform a `helm install` with the `--set-file coordinator.web.auth.ssoFile=<your-local-path>/ad.json` option indicating the location of the `ad.json`. See [Deploying Dremio to Kubernetes](/current/deploy-dremio/deploy-on-kubernetes#step-1-deploying-dremio-to-kubernetes) for additional information.
|
|
1644
|
+
* Use `--set-file dremio.configBinaries.trustStore=<path/to/truststore/jks/file/on/local/machine>` to pass in a local truststore file, if TLS is required.
|
|
1645
|
+
|
|
1646
|
+
1. Edit the `dremio.conf` file, and add the following properties:
|
|
1647
|
+
|
|
1648
|
+
Example Dremio Service Configuration
|
|
1649
|
+
|
|
1650
|
+
```
|
|
1651
|
+
services: {
|
|
1652
|
+
coordinator.enabled: true,
|
|
1653
|
+
coordinator.web.auth.type: "ldap",
|
|
1654
|
+
coordinator.web.auth.config: "ad.json"
|
|
1655
|
+
}
|
|
1656
|
+
```
|
|
1657
|
+
2. Optionally, to configure Dremio to use TLS when connecting to LDAP, perform the following steps:
|
|
1658
|
+
|
|
1659
|
+
1. Configure the LDAP `connectionMode` in `ad.json` for the required level of TLS functionality. See LDAP Connection Mode.
|
|
1660
|
+
2. To configure a truststore for the validation of LDAP TLS certificates, update `dremio.conf` with `javax.net.ssl` settings for the trustStore and trustStorePassword.
|
|
1661
|
+
|
|
1662
|
+
Example Truststore Configuration
|
|
1663
|
+
|
|
1664
|
+
```
|
|
1665
|
+
javax.net.ssl {
|
|
1666
|
+
trustStore: "<path/to/truststore/jks/file>",
|
|
1667
|
+
trustStorePassword: "trustStorePassword"
|
|
1668
|
+
}
|
|
1669
|
+
```
|
|
1670
|
+
3. Copy the modified `dremio.conf` and `ad.json` files to every coordinator node in the Dremio cluster. The location of the `ad.json` file is relative to the `/conf` directory. The path to the file can be absolute; the file can live anywhere in the system.
|
|
1671
|
+
|
|
1672
|
+
Scale-Out Coordinators
|
|
1673
|
+
|
|
1674
|
+
When using [scale-out coordinators](/current/what-is-dremio/architecture/#scale-out-coordinators), you must ensure that both the `dremio.conf` configuration and the `ad.json` file are present on every coordinator node. Scale-out coordinators require the authentication configuration even when `coordinator.web.enabled: false` is set.
|
|
1675
|
+
|
|
1676
|
+
## LDAP Properties
|
|
1677
|
+
|
|
1678
|
+
The `ad.json` file is a JSON-formatted config file that defines how Dremio connects to and communicates with your LDAP/AD server, including how it finds users, groups, and handles secure authentication.
|
|
1679
|
+
|
|
1680
|
+
Example Configuration for LDAP using Group List
|
|
1681
|
+
|
|
1682
|
+
```
|
|
1683
|
+
{
|
|
1684
|
+
"connectionMode": "PLAIN",
|
|
1685
|
+
"servers": [
|
|
1686
|
+
{
|
|
1687
|
+
"hostname": "ldap.example.com",
|
|
1688
|
+
"port": 389
|
|
1689
|
+
}
|
|
1690
|
+
],
|
|
1691
|
+
"names": {
|
|
1692
|
+
"bindDN": "CN=admin,DC=drem,DC=io",
|
|
1693
|
+
"bindMethod": "UNAUTHENTICATED",
|
|
1694
|
+
"bindPassword": "admin",
|
|
1695
|
+
"baseDN": "dc=drem,dc=io",
|
|
1696
|
+
"userFilter": "&(objectClass=posixAccount)",
|
|
1697
|
+
"userAttributes": {
|
|
1698
|
+
"baseDNs": [
|
|
1699
|
+
"OU=Users,OU=ldaptest,DC=drem,DC=io",
|
|
1700
|
+
],
|
|
1701
|
+
"id": "uid",
|
|
1702
|
+
"firstname": "givenName",
|
|
1703
|
+
"lastname": "sn",
|
|
1704
|
+
"email": "mail"
|
|
1705
|
+
},
|
|
1706
|
+
"userGroupRelationship": "GROUP_ENTRY_LISTS_USERS",
|
|
1707
|
+
"groupEntryListsUsers": {
|
|
1708
|
+
"userEntryUserIdAttribute": "uid",
|
|
1709
|
+
"groupEntryUserIdAttribute": "memberUid"
|
|
1710
|
+
},
|
|
1711
|
+
"groupDNs": ["cn={0},OU=test,OU=ldaptest,DC=drem,DC=io",
|
|
1712
|
+
"cn={0},OU=dev,OU=ldaptest,DC=drem,DC=io"],
|
|
1713
|
+
"groupFilter": "|(objectClass=posixGroup)(objectClass=sub)",
|
|
1714
|
+
"autoAdminFirstUser": false
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
```
|
|
1718
|
+
|
|
1719
|
+
### LDAP Connection Mode
|
|
1720
|
+
|
|
1721
|
+
The `connectionMode` property configures how Dremio establishes connections to the LDAP/Active Directory servers. The two main secure options — ANY\_SSL and TRUSTED\_SSL — both use SSL/TLS but differ in how SSL certificates are validated. The modes are:
|
|
1722
|
+
|
|
1723
|
+
* `PLAIN`: The connection between Dremio and the LDAP server is unencrypted. Dremio connects over port 389 by default, the standard LDAP port for unencrypted communication. This mode is appropriate for internal networks and isolated or trusted environments.
|
|
1724
|
+
* `ANY_SSL`: Encrypts the connection using SSL/TLS. This mode does not validate the LDAP server's SSL certificate, so it is useful for testing or internal environments where strict certificate checks are not required.
|
|
1725
|
+
* `TRUSTED_SSL`: This mode encrypts the connection using SSL/TLS and validates the LDAP server’s SSL certificate against the Java truststore. This mode requires additional configuration in `dremio.conf` with the location of the trust store and its password.
|
|
1726
|
+
|
|
1727
|
+
### LDAP Server Configuration
|
|
1728
|
+
|
|
1729
|
+
The `servers` section of an `ad.json` file defines the LDAP servers that Dremio can use for authentication and directory lookups. Each server accepts the following properties:
|
|
1730
|
+
|
|
1731
|
+
* `hostname`: The Fully Qualified Domain Name or IP address of the LDAP server.
|
|
1732
|
+
* `port`: The port where the LDAP server accepts connections. Port 389 is the default LDAP when the `connectionMode` is `PLAIN`; port 636 is the default port when using SSL/TLS.
|
|
1733
|
+
|
|
1734
|
+
### LDAP User and Groups
|
|
1735
|
+
|
|
1736
|
+
The `names` section maps LDAP attributes to Dremio’s internal user and group fields. LDAP `names` are defined using the following properties:
|
|
1737
|
+
|
|
1738
|
+
| Property | Required | Description |
|
|
1739
|
+
| --- | --- | --- |
|
|
1740
|
+
| `autoAdminFirstUser` | No | The first valid LDAP user to log in to Dremio is given the Admin role by default. This behavior, defined by `autoAdminFirstUser: true`, is included in the `ad.json` file. Alternatively, you can specify a list of users and/or groups to be given the Admin role during initial login; it is used for bootstrapping only. See Admin Users for additional configuration information. |
|
|
1741
|
+
| `baseDN` | Yes | A base distinguished name is the search's root path. If `userAttributes.baseDNs` or `groupAttributes.baseDNs` are specified, they override `baseDN` for search purposes. |
|
|
1742
|
+
| `bindDN` | No | A bind distinguished name is a client's username to authenticate (bind) to the LDAP directory server. This property is not required when using a `bindMethod` of `ANONYMOUS`. In particular, `CN=admin,DC=drem,DC=io` must not be used. |
|
|
1743
|
+
| `bindMethod` | No | The authentication method: * `ANONYMOUS`: Connect anonymously to the LDAP server. When authenticating to Dremio, empty passwords for users are not allowed. * `SIMPLE_BIND`: Default. Connect and authenticate to the LDAP server using `bindDN` and `bindPassword`. * `UNAUTHENTICATED`: Connect to the LDAP server using an unauthenticated bind. `bindDN` is required. |
|
|
1744
|
+
| `bindPassword` | No | Password credential for the user who connects from the Dremio LDAP client to the LDAP server. `bindPassword` can be encrypted using the `dremio-admin encrypt` CLI command. This property must not be present if you are using `ANONYMOUS` or `UNAUTHENTICATED` for `bindMethod` mode. See Bind Password Options for additional configuration information. |
|
|
1745
|
+
| `email` | No | Attribute for the email address. |
|
|
1746
|
+
| `firstname` | No | Attribute for the first name. |
|
|
1747
|
+
| `groupAttributes` | No | A mapping of LDAP group attributes to Dremio group attributes. The `baseDN`, `searchScope`, and `id` properties are used. |
|
|
1748
|
+
| `groupDNs` | No | A group distinguished name refers to the full path of a specific group object used for organizing users. |
|
|
1749
|
+
| `groupFilter` | Yes | LDAP filter for groups. |
|
|
1750
|
+
| `groupMembership` | No | Value returned by the Dremio `memberOf()` function. This attribute specifies the groups containing a user or a group. |
|
|
1751
|
+
| `groupRecursive` | No | Attribute of a user or a group that lists transitive group membership. |
|
|
1752
|
+
| `id` | No | If used with the `userAttributes` property, `id` is the attribute for the login name, defaulting to `sAMAccountName`. If used with the `groupAttributes` property, `id` is the attribute for the group name, defaulting to `CN`. |
|
|
1753
|
+
| `lastname` | No | Attribute for the last name. |
|
|
1754
|
+
| `searchScope` | No | Scope of user searches: * `BASE`: Match the exact entry. * `ONE`: Searches immediate children below the specified `baseDN`. * `SUB_TREE`: Default. Searches subtrees below the specified `baseDN`. |
|
|
1755
|
+
| `userAttributes` | No | A mapping of LDAP user attributes to Dremio user attributes. This property should include `firstname`, `lastname`, and `email`. |
|
|
1756
|
+
| `userDNs` | No | A user distinguished name is the unique path that identifies a specific user object. |
|
|
1757
|
+
| `userFilter` | Yes | LDAP filter for validating users. Only users who fit the specific criteria are allowed to authenticate. |
|
|
1758
|
+
| `userGroupRelationship` | No | Determines whether you are implementing lists based on users or groups. * `GROUP_ENTRY_LISTS_USERS`: Specifies whether the group entry in LDAP lists the users that belong to it. * `USER_ENTRY_LISTS_GROUPS`: Default. Specifies whether the user entry in LDAP lists the groups to which the user belongs. The group attribute in LDAP is configured by the `groupMembership` property. |
|
|
1759
|
+
|
|
1760
|
+
#### Defining Users
|
|
1761
|
+
|
|
1762
|
+
##### Using User Distinguished Names
|
|
1763
|
+
|
|
1764
|
+
This approach specifies a list of templates for `userDN`. The placeholder `{0}` is replaced with the username entered by the user, and that Distinguished Name (DN) is used during LDAP bind. In the specified order, Dremio attempts to bind to the provided `userDN`. In the DN-based approach, the `baseDN`, `searchScope`, and `id` properties cannot be specified under `userAttributes`.
|
|
1765
|
+
|
|
1766
|
+
userDNs example
|
|
1767
|
+
|
|
1768
|
+
```
|
|
1769
|
+
"userDNs": ["cn={0},dc=staticsecurity,dc=dremio,dc=com"],
|
|
1770
|
+
"userAttributes": {
|
|
1771
|
+
"firstname": "givenName",
|
|
1772
|
+
"lastname": "sn",
|
|
1773
|
+
"email": "mail"
|
|
1774
|
+
}
|
|
1775
|
+
```
|
|
1776
|
+
|
|
1777
|
+
##### Using User Attributes
|
|
1778
|
+
|
|
1779
|
+
In this approach, you map LDAP user attributes to Dremio user attributes. The `userDN` field must not be specified in the attribute-based approach. Do not change the value of `id` in the `ad.conf` file after you start Dremio. Changing the value can result in the loss of user privileges.
|
|
1780
|
+
|
|
1781
|
+
userAttributes example
|
|
1782
|
+
|
|
1783
|
+
```
|
|
1784
|
+
"userAttributes": {
|
|
1785
|
+
"baseDNs": [
|
|
1786
|
+
"OU=test,OU=ad,DC=drem,DC=io"
|
|
1787
|
+
],
|
|
1788
|
+
"searchScope": "SUB_TREE",
|
|
1789
|
+
"id": "sAMAccountName",
|
|
1790
|
+
"firstname": "givenName",
|
|
1791
|
+
"lastname": "sn",
|
|
1792
|
+
"email": "mail"
|
|
1793
|
+
}
|
|
1794
|
+
```
|
|
1795
|
+
|
|
1796
|
+
##### Using userFilter
|
|
1797
|
+
|
|
1798
|
+
The following example uses the `userFilter` property to limit access to engineering group members.
|
|
1799
|
+
|
|
1800
|
+
userFilter example
|
|
1801
|
+
|
|
1802
|
+
```
|
|
1803
|
+
"userFilter": "&(objectClass=user)(memberOf=cn=engineering,OU=Groups,OU=ad,DC=drem,DC=io)",
|
|
1804
|
+
```
|
|
1805
|
+
|
|
1806
|
+
#### Defining Groups
|
|
1807
|
+
|
|
1808
|
+
##### Using Group Distinguished Names
|
|
1809
|
+
|
|
1810
|
+
This approach specifies a list of templates for group Distinguished Names (DNs). The placeholder `{0}` is replaced with the group name entered by the user. Dremio attempts to search for the given `groupDNs` in the specified order. The `groupAttributes` property must not be specified in the DN-based approach.
|
|
1811
|
+
|
|
1812
|
+
Example using Group Distinguised Names
|
|
1813
|
+
|
|
1814
|
+
```
|
|
1815
|
+
"groupDNs": ["cn={0},OU=engg,OU=test,OU=ad,DC=drem,DC=io"]
|
|
1816
|
+
```
|
|
1817
|
+
|
|
1818
|
+
##### Using Group Attributes
|
|
1819
|
+
|
|
1820
|
+
In this method, use the `groupAttributes` property to specify a list of `baseDNs` and group name IDs. These properties map LDAP group attributes to Dremio group attributes. The `baseDNs`, `searchScope`, and `id` properties are required. The `groupDNs` field must not be specified in the attribute-based approach.
|
|
1821
|
+
|
|
1822
|
+
groupAttributes example
|
|
1823
|
+
|
|
1824
|
+
```
|
|
1825
|
+
"groupAttributes": {
|
|
1826
|
+
"baseDNs": ["dc=roles,dc=dremio,dc=com"],
|
|
1827
|
+
"searchScope": "SUB_TREE",
|
|
1828
|
+
"id": "CN"
|
|
1829
|
+
}
|
|
1830
|
+
```
|
|
1831
|
+
|
|
1832
|
+
#### Defining User-Group Relationships
|
|
1833
|
+
|
|
1834
|
+
The relationship between users and groups can be defined with one of the following methods:
|
|
1835
|
+
|
|
1836
|
+
* Group memberships
|
|
1837
|
+
* Group lists
|
|
1838
|
+
|
|
1839
|
+
##### Group Membership Method
|
|
1840
|
+
|
|
1841
|
+
The group membership method implements user entries in LDAP that list the groups to which the user belongs. The user entries in LDAP are configured to list their group membership via the internal field `memberOf`.
|
|
1842
|
+
|
|
1843
|
+
For example,
|
|
1844
|
+
|
|
1845
|
+
* Dan is part of the **BI** group
|
|
1846
|
+
* The BI group is part of the engineering group,
|
|
1847
|
+
* `groupMembership` property will contain only the BI group, but the `groupRecursive` property will contain the engineering group.
|
|
1848
|
+
|
|
1849
|
+
Example settings for groupMembership and groupRecursive properties
|
|
1850
|
+
|
|
1851
|
+
```
|
|
1852
|
+
"groupMembership": "memberOf",
|
|
1853
|
+
"groupRecursive": "transitive-memberOf",
|
|
1854
|
+
```
|
|
1855
|
+
|
|
1856
|
+
To establish this user-group relationship:
|
|
1857
|
+
|
|
1858
|
+
* Specify `groupMembership` property.
|
|
1859
|
+
* Specify (if applicable) the `groupRecursive` property.
|
|
1860
|
+
|
|
1861
|
+
tip
|
|
1862
|
+
|
|
1863
|
+
If you include the `groupRecursive` key, ensure the value is the correct property for recursive lookups for your LDAP implementation. If you do not specify the proper property, Dremio skips recursive lookup and finds only the group membership. If you omit the `groupRecursive` key-value pair from your configuration, Dremio defaults to recursive lookup.
|
|
1864
|
+
|
|
1865
|
+
You can also specify the `"userGroupRelationship": "USER_ENTRY_LISTS_GROUPS"` property-value. However, this property is optional since it is the default.
|
|
1866
|
+
|
|
1867
|
+
Example Group Membership Configuration
|
|
1868
|
+
|
|
1869
|
+
```
|
|
1870
|
+
{
|
|
1871
|
+
"connectionMode": "PLAIN",
|
|
1872
|
+
"servers": [
|
|
1873
|
+
{
|
|
1874
|
+
"hostname": "<LDAP_HOST>",
|
|
1875
|
+
"port": 389
|
|
1876
|
+
}
|
|
1877
|
+
],
|
|
1878
|
+
"names": {
|
|
1879
|
+
"bindDN": "CN=Admin,OU=Users,OU=ad,DC=drem,DC=io",
|
|
1880
|
+
"bindPassword": "password",
|
|
1881
|
+
"baseDN": "dc=dremio,dc=io",
|
|
1882
|
+
"userFilter": "&(objectClass=user)(|(memberOf=CN=QA,OU=temps,OU=test,OU=ad,DC=drem,DC=io)(memberOf=CN=qa,OU=engg,OU=test,OU=ad,DC=drem,DC=io))",
|
|
1883
|
+
"userAttributes": {
|
|
1884
|
+
"baseDNs": [
|
|
1885
|
+
"OU=test,OU=ad,DC=drem,DC=io"
|
|
1886
|
+
],
|
|
1887
|
+
"searchScope": "SUB_TREE",
|
|
1888
|
+
"id": "sAMAccountName",
|
|
1889
|
+
"firstname": "givenName",
|
|
1890
|
+
"lastname": "sn",
|
|
1891
|
+
"email": "mail"
|
|
1892
|
+
},
|
|
1893
|
+
"groupMembership": "memberOf",
|
|
1894
|
+
"groupRecursive": "transitive-memberOf",
|
|
1895
|
+
"groupDNs": ["cn={0},OU=engg,OU=test,OU=ad,DC=drem,DC=io"],
|
|
1896
|
+
"groupFilter": "(objectClass=group)",
|
|
1897
|
+
"autoAdminFirstUser": true
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
```
|
|
1901
|
+
|
|
1902
|
+
##### Group List Method
|
|
1903
|
+
|
|
1904
|
+
The group list method implements user-group relationships where the group entry lists the users that belong to that group.
|
|
1905
|
+
|
|
1906
|
+
For example,
|
|
1907
|
+
|
|
1908
|
+
* `uid` is the ID attribute used for the user entry, and `memberUid` is the ID attribute used for the group entry.
|
|
1909
|
+
* Dan's ID is 1234, represented by the attribute `uid` in Dan's LDAP records.
|
|
1910
|
+
* Dan is part of the **BI** group
|
|
1911
|
+
* The LDAP entry for group **BI** lists `memberUid = 1234`, indicating that Dan is a valid group member.
|
|
1912
|
+
|
|
1913
|
+
Example Group List
|
|
1914
|
+
|
|
1915
|
+
```
|
|
1916
|
+
"userGroupRelationship": "GROUP_ENTRY_LISTS_USERS",
|
|
1917
|
+
"groupEntryListsUsers": {
|
|
1918
|
+
"userEntryUserIdAttribute": "uid",
|
|
1919
|
+
"groupEntryUserIdAttribute": "memberUid"
|
|
1920
|
+
}
|
|
1921
|
+
```
|
|
1922
|
+
|
|
1923
|
+
To establish user-group relationships in `ad.json` using the group list method:
|
|
1924
|
+
|
|
1925
|
+
* Set `userGroupRelationship` to `GROUP_ENTRY_LISTS_USERS`.
|
|
1926
|
+
* Specify the `groupEntryListsUsers` property and its sub-properties, `userEntryUserIdAttribute` and `groupEntryUserIdAttribute`.
|
|
1927
|
+
|
|
1928
|
+
Example Group List Configuration
|
|
1929
|
+
|
|
1930
|
+
```
|
|
1931
|
+
{
|
|
1932
|
+
"connectionMode": "PLAIN",
|
|
1933
|
+
"servers": [
|
|
1934
|
+
{
|
|
1935
|
+
"hostname": "host_ip",
|
|
1936
|
+
"port": 389
|
|
1937
|
+
}
|
|
1938
|
+
],
|
|
1939
|
+
"names": {
|
|
1940
|
+
"bindDN": "CN=admin,DC=drem,DC=io",
|
|
1941
|
+
"bindMethod": "UNAUTHENTICATED",
|
|
1942
|
+
"bindPassword": "admin",
|
|
1943
|
+
"baseDN": "dc=drem,dc=io",
|
|
1944
|
+
"userFilter": "&(objectClass=posixAccount)",
|
|
1945
|
+
"userAttributes": {
|
|
1946
|
+
"baseDNs": [
|
|
1947
|
+
"OU=Users,OU=ldaptest,DC=drem,DC=io",
|
|
1948
|
+
],
|
|
1949
|
+
"id": "uid",
|
|
1950
|
+
"firstname": "givenName",
|
|
1951
|
+
"lastname": "sn",
|
|
1952
|
+
"email": "mail"
|
|
1953
|
+
},
|
|
1954
|
+
"userGroupRelationship": "GROUP_ENTRY_LISTS_USERS",
|
|
1955
|
+
"groupEntryListsUsers": {
|
|
1956
|
+
"userEntryUserIdAttribute": "uid",
|
|
1957
|
+
"groupEntryUserIdAttribute": "memberUid"
|
|
1958
|
+
},
|
|
1959
|
+
"groupDNs": ["cn={0},OU=test,OU=ldaptest,DC=drem,DC=io",
|
|
1960
|
+
"cn={0},OU=dev,OU=ldaptest,DC=drem,DC=io"],
|
|
1961
|
+
"groupFilter": "|(objectClass=posixGroup)(objectClass=sub)",
|
|
1962
|
+
"autoAdminFirstUser": false
|
|
1963
|
+
}
|
|
1964
|
+
}
|
|
1965
|
+
```
|
|
1966
|
+
|
|
1967
|
+
### Bind Password Options
|
|
1968
|
+
|
|
1969
|
+
Dremio offers several options for managing the bind password.
|
|
1970
|
+
|
|
1971
|
+
#### Encryption
|
|
1972
|
+
|
|
1973
|
+
For customers with stringent security standards and requirements, password encryption provides a secure method for communicating key information with the LDAP service. Encryption is accomplished using the CLI command [`dremio-admin encrypt`](/current/reference/admin-cli/encryption/).
|
|
1974
|
+
|
|
1975
|
+
To encrypt the bind password, follow these steps:
|
|
1976
|
+
|
|
1977
|
+
1. Run `dremio-admin encrypt` as the `dremio` service user.
|
|
1978
|
+
|
|
1979
|
+
LDAP secret Encryption
|
|
1980
|
+
|
|
1981
|
+
```
|
|
1982
|
+
sudo su - dremio bin/dremio-admin encrypt <yourSecret>
|
|
1983
|
+
```
|
|
1984
|
+
|
|
1985
|
+
If running the command as the `dremio` user is impossible, change the owner and group of the `$DREMIO_HOME/data/security` folder and underlying files to the `dremio` service user.
|
|
1986
|
+
|
|
1987
|
+
Dremio outputs:
|
|
1988
|
+
|
|
1989
|
+
Example LDAP Encryption Output
|
|
1990
|
+
|
|
1991
|
+
```
|
|
1992
|
+
secret:1.FxLevnDdoHx58x7VZmBpNExUiM76_u7XAXo1SJ8mCJxzeC1SirK2Jm5aBRR-h2_r8iypOAcRYSzH4uyP33Vg6Fh94bV6evuQ.wENZ7fgdJBw92wy4DiPhpJRzNP07wBaVpspv8KygjMfYV2en3YPFZw==
|
|
1993
|
+
```
|
|
1994
|
+
2. Copy the entire output to `bindPassword` in `ad.json`.
|
|
1995
|
+
3. Copy the modified `ad.json` file to every coordinator node in the Dremio cluster.
|
|
1996
|
+
|
|
1997
|
+
#### Other Bind Password Options
|
|
1998
|
+
|
|
1999
|
+
Other options are available for `bindPassword`:
|
|
2000
|
+
|
|
2001
|
+
* `env`: the `bindPassword` is set to `env:ldap` with the environment variable set by the command `export ldap <secret>` where `<secret>` is the output.
|
|
2002
|
+
* `file`: the `bindPassword` is set to `file:///tmp/test.file` where the file specified contains the output secret.
|
|
2003
|
+
* `data`: The secret is in base64 format. The bindPassword is then set to `data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==`.
|
|
2004
|
+
|
|
2005
|
+
Options `env` and `file` apply to the local node. If you use a multi-coordinator configuration, you must do this for each coordinator node. However, this method contains the raw secret in the `env` scheme and file. Only `secret` uses an encrypted secret.
|
|
2006
|
+
|
|
2007
|
+
### Admin Users
|
|
2008
|
+
|
|
2009
|
+
To specify users/groups as administrators up-front, during initial login:
|
|
2010
|
+
|
|
2011
|
+
1. In the `ad.json` file, set `autoAdminFirstUser` to false.
|
|
2012
|
+
|
|
2013
|
+
Example property for defining Admin users
|
|
2014
|
+
|
|
2015
|
+
```
|
|
2016
|
+
"autoAdminFirstUser": false
|
|
2017
|
+
```
|
|
2018
|
+
2. Create a file called `bootstrap-admin-users.json` that contains `users` and `groups` arrays to specify the names of the users and groups that should belong to the `ADMIN` role. Use the Common Name (CN) for each user and group you list in the arrays.
|
|
2019
|
+
|
|
2020
|
+
Example settings for users and groups properties
|
|
2021
|
+
|
|
2022
|
+
```
|
|
2023
|
+
{
|
|
2024
|
+
users: ["joe", "bob"],
|
|
2025
|
+
groups: ["marketers", "sales wizards"]
|
|
2026
|
+
}
|
|
2027
|
+
```
|
|
2028
|
+
|
|
2029
|
+
When you set `autoAdminFirstUser` to `false`, then you **must** specify users/groups in a `bootstrap-admin-users.json` file. Otherwise, an administrator won't be specified. The users/groups specified in the `bootstrap-admin-users.json` file are used only during initial login and when `autoAdminFirstUser` is set to `false`. To add other users or groups to the `Admin` role **after the initial login**, use the Dremio console.
|
|
2030
|
+
3. Add the configuration to your deployment:
|
|
2031
|
+
|
|
2032
|
+
* Kubernetes
|
|
2033
|
+
* Standalone
|
|
2034
|
+
|
|
2035
|
+
This can be done in one of two ways:
|
|
2036
|
+
|
|
2037
|
+
**Method 1 (Preferred)**
|
|
2038
|
+
|
|
2039
|
+
Add the configuration of your `bootstrap-admin-users.json` file to your `values-override.yaml` via the `configFiles` option. This approach is detailed in [Additional Config Files](/current/deploy-dremio/configuring-kubernetes/#additional-config-files).
|
|
2040
|
+
|
|
2041
|
+
**Method 2**
|
|
2042
|
+
|
|
2043
|
+
Perform a `helm install` with the `--set-file "dremio.configFiles.bootstrap-admin-users\.json"=/your/local/path/here` option, indicating the location of the `bootstrap-admin-users.json` file. For additional information, see step 1 in [Deploying Dremio to Kubernetes](/current/deploy-dremio/deploy-on-kubernetes/#step-1-deploy-dremio).
|
|
2044
|
+
|
|
2045
|
+
1. Place `bootstrap-admin-users.json` under the Dremio configuration directory.
|
|
2046
|
+
2. Start Dremio
|
|
2047
|
+
|
|
2048
|
+
Was this page helpful?
|
|
2049
|
+
|
|
2050
|
+
[Previous
|
|
2051
|
+
|
|
2052
|
+
Identity Providers](/current/security/authentication/identity-providers/)[Next
|
|
2053
|
+
|
|
2054
|
+
Microsoft Entra ID](/current/security/authentication/identity-providers/microsoft-entra-id)
|
|
2055
|
+
|
|
2056
|
+
* Configuring Dremio for LDAP
|
|
2057
|
+
* LDAP Properties
|
|
2058
|
+
+ LDAP Connection Mode
|
|
2059
|
+
+ LDAP Server Configuration
|
|
2060
|
+
+ LDAP User and Groups
|
|
2061
|
+
- Defining Users
|
|
2062
|
+
* Using User Distinguished Names
|
|
2063
|
+
* Using User Attributes
|
|
2064
|
+
* Using userFilter
|
|
2065
|
+
- Defining Groups
|
|
2066
|
+
* Using Group Distinguished Names
|
|
2067
|
+
* Using Group Attributes
|
|
2068
|
+
- Defining User-Group Relationships
|
|
2069
|
+
* Group Membership Method
|
|
2070
|
+
* Group List Method
|
|
2071
|
+
+ Bind Password Options
|
|
2072
|
+
- Encryption
|
|
2073
|
+
- Other Bind Password Options
|
|
2074
|
+
+ Admin Users
|