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.
Files changed (45) hide show
  1. package/.eslintrc.json +14 -0
  2. package/.prettierrc +7 -0
  3. package/README.md +59 -0
  4. package/dremiodocs/dremio-cloud/cloud-api-reference.md +748 -0
  5. package/dremiodocs/dremio-cloud/dremio-cloud-about.md +225 -0
  6. package/dremiodocs/dremio-cloud/dremio-cloud-admin.md +3754 -0
  7. package/dremiodocs/dremio-cloud/dremio-cloud-bring-data.md +6098 -0
  8. package/dremiodocs/dremio-cloud/dremio-cloud-changelog.md +32 -0
  9. package/dremiodocs/dremio-cloud/dremio-cloud-developer.md +1147 -0
  10. package/dremiodocs/dremio-cloud/dremio-cloud-explore-analyze.md +2522 -0
  11. package/dremiodocs/dremio-cloud/dremio-cloud-get-started.md +300 -0
  12. package/dremiodocs/dremio-cloud/dremio-cloud-help-support.md +869 -0
  13. package/dremiodocs/dremio-cloud/dremio-cloud-manage-govern.md +800 -0
  14. package/dremiodocs/dremio-cloud/dremio-cloud-overview.md +36 -0
  15. package/dremiodocs/dremio-cloud/dremio-cloud-security.md +1844 -0
  16. package/dremiodocs/dremio-cloud/sql-docs.md +7180 -0
  17. package/dremiodocs/dremio-software/dremio-software-acceleration.md +1575 -0
  18. package/dremiodocs/dremio-software/dremio-software-admin.md +884 -0
  19. package/dremiodocs/dremio-software/dremio-software-client-applications.md +3277 -0
  20. package/dremiodocs/dremio-software/dremio-software-data-products.md +560 -0
  21. package/dremiodocs/dremio-software/dremio-software-data-sources.md +8701 -0
  22. package/dremiodocs/dremio-software/dremio-software-deploy-dremio.md +3446 -0
  23. package/dremiodocs/dremio-software/dremio-software-get-started.md +848 -0
  24. package/dremiodocs/dremio-software/dremio-software-monitoring.md +422 -0
  25. package/dremiodocs/dremio-software/dremio-software-reference.md +677 -0
  26. package/dremiodocs/dremio-software/dremio-software-security.md +2074 -0
  27. package/dremiodocs/dremio-software/dremio-software-v25-api.md +32637 -0
  28. package/dremiodocs/dremio-software/dremio-software-v26-api.md +36757 -0
  29. package/jest.config.js +10 -0
  30. package/package.json +25 -0
  31. package/src/api/catalog.ts +74 -0
  32. package/src/api/jobs.ts +105 -0
  33. package/src/api/reflection.ts +77 -0
  34. package/src/api/source.ts +61 -0
  35. package/src/api/user.ts +32 -0
  36. package/src/client/base.ts +66 -0
  37. package/src/client/cloud.ts +37 -0
  38. package/src/client/software.ts +73 -0
  39. package/src/index.ts +16 -0
  40. package/src/types/catalog.ts +31 -0
  41. package/src/types/config.ts +18 -0
  42. package/src/types/job.ts +18 -0
  43. package/src/types/reflection.ts +29 -0
  44. package/tests/integration_manual.ts +95 -0
  45. 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
+ ![](/assets/images/rbac-object-hierarchy-a829e25a2980a7f00d7cc2a85ccbbf00.png)
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
+ ![](/assets/images/rbac-inheritance-5ad539f979430ed0b6b949a9d4a50830.png)
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
+ ![](/assets/images/rbac-scope-55174fe1a171329a6f9194c775e27f77.png)
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 ![](/images/icons/managed-access-icon.png) 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 ![This is the icon that represents more actions.](/images/icons/settings.png "Settings") or ![This is the icon that represents more actions.](/images/icons/more.png "Icon represents more actions.") 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
+ ![](/assets/images/privileges-users-table-5eb046e1d2acd0cc1a6d1bd87d3afc35.png)
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 ![This is the icon that represents more actions.](/images/icons/settings.png "Settings") or ![This is the icon that represents more actions.](/images/icons/more.png "Icon represents more actions.") 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 ![This is the icon that represents more actions.](/images/ellipsis-icon.png) 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
+ ![](/assets/images/privileges-users-table-5eb046e1d2acd0cc1a6d1bd87d3afc35.png)
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
+ ![](/assets/images/rbac-privilege-1-ab4d9d59f7940dddc05d90ba62556db9.png)
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
+ ![](/assets/images/rbac-privilege-2-22c128dbaec6b244cca0f812b40f7d06.png)
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
+ ![](/assets/images/rbac-privilege-3-121f99249e16dfe376040d3c4cae2b40.png)
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
+ ![](/assets/images/rbac-object-hierarchy-a829e25a2980a7f00d7cc2a85ccbbf00.png)
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
+ ![](/assets/images/rbac-inheritance-5ad539f979430ed0b6b949a9d4a50830.png)
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
+ ![](/assets/images/rbac-scope-55174fe1a171329a6f9194c775e27f77.png)
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 ![](/images/icons/managed-access-icon.png) 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 ![This is the icon that represents more actions.](/images/icons/settings.png "Settings") or ![This is the icon that represents more actions.](/images/icons/more.png "Icon represents more actions.") 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
+ ![](/assets/images/privileges-users-table-5eb046e1d2acd0cc1a6d1bd87d3afc35.png)
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 ![This is the icon that represents more actions.](/images/icons/settings.png "Settings") or ![This is the icon that represents more actions.](/images/icons/more.png "Icon represents more actions.") 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 ![This is the icon that represents more actions.](/images/ellipsis-icon.png) 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
+ ![](/assets/images/privileges-users-table-5eb046e1d2acd0cc1a6d1bd87d3afc35.png)
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
+ ![](/assets/images/rbac-privilege-1-ab4d9d59f7940dddc05d90ba62556db9.png)
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
+ ![](/assets/images/rbac-privilege-2-22c128dbaec6b244cca0f812b40f7d06.png)
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
+ ![](/assets/images/rbac-privilege-3-121f99249e16dfe376040d3c4cae2b40.png)
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
+ ![](/assets/images/ranger-row-tab-816339a932b061bab4a17d81e77be873.png)
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
+ ![](/assets/images/ranger-row-filter-2-7445a72be0f63c9cf236b7ddd3d9de9d.png)
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
+ ![](/assets/images/ranger-masking-1-2043318099b6431a5a3145350a8743b2.png)
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
+ ![](/assets/images/ranger-row-tab-816339a932b061bab4a17d81e77be873.png)
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
+ ![](/assets/images/ranger-row-filter-2-7445a72be0f63c9cf236b7ddd3d9de9d.png)
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
+ ![](/assets/images/ranger-masking-tab-1713107d595300f3d5cbd4ff21f4ad70.png)
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
+ ![](/assets/images/ranger-masking-1-2043318099b6431a5a3145350a8743b2.png)
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