Skip to content

Commit 8172a42

Browse files
authored
Add IS_OWNER permission for SQL Warehouse (#2600)
* add `IS_OWNER`to sql endpoint permissions * doc * automatically set owner for sql warehouse * fix tests
1 parent cede242 commit 8172a42

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

docs/resources/permissions.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,6 @@ resource "databricks_permissions" "workspace_file_usage" {
360360
}
361361
```
362362

363-
364363
## Folder usage
365364

366365
Valid [permission levels](https://docs.databricks.com/security/access-control/workspace-acl.html#folder-permissions) for folders of [databricks_directory](directory.md) are: `CAN_READ`, `CAN_RUN`, `CAN_EDIT`, and `CAN_MANAGE`. Notebooks and experiments in a folder inherit all permissions settings of that folder. For example, a user (or service principal) that has `CAN_RUN` permission on a folder has `CAN_RUN` permission on the notebooks in that folder.
@@ -618,7 +617,7 @@ resource "databricks_permissions" "token_usage" {
618617

619618
## SQL warehouse usage
620619

621-
[SQL warehouses](https://docs.databricks.com/sql/user/security/access-control/sql-endpoint-acl.html) have two possible permissions: `CAN_USE` and `CAN_MANAGE`:
620+
[SQL warehouses](https://docs.databricks.com/sql/user/security/access-control/sql-endpoint-acl.html) have three possible permissions: `IS_OWNER`, `CAN_USE` and `CAN_MANAGE`:
622621

623622
```hcl
624623
data "databricks_current_user" "me" {}

permissions/resource_permissions.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ func (a PermissionsAPI) Update(objectID string, objectACL AccessControlChangeLis
175175
PermissionLevel: "CAN_MANAGE",
176176
})
177177
}
178-
if strings.HasPrefix(objectID, "/jobs") || strings.HasPrefix(objectID, "/pipelines") {
178+
if strings.HasPrefix(objectID, "/jobs") || strings.HasPrefix(objectID, "/pipelines") || strings.HasPrefix(objectID, "/sql/warehouses") {
179179
owners := 0
180180
for _, acl := range objectACL.AccessControlList {
181181
if acl.PermissionLevel == "IS_OWNER" {
@@ -245,6 +245,15 @@ func (a PermissionsAPI) Delete(objectID string) error {
245245
UserName: job.CreatorUserName,
246246
PermissionLevel: "IS_OWNER",
247247
})
248+
} else if strings.HasPrefix(objectID, "/sql/warehouses") {
249+
warehouse, err := w.Warehouses.GetById(a.context, strings.ReplaceAll(objectID, "/sql/warehouses", ""))
250+
if err != nil {
251+
return err
252+
}
253+
accl.AccessControlList = append(accl.AccessControlList, AccessControlChange{
254+
UserName: warehouse.CreatorName,
255+
PermissionLevel: "IS_OWNER",
256+
})
248257
}
249258
return a.put(objectID, accl)
250259
}
@@ -302,7 +311,7 @@ func permissionsResourceIDFields() []permissionsIDFieldMapping {
302311
{"repo_path", "repo", "repos", []string{"CAN_READ", "CAN_RUN", "CAN_EDIT", "CAN_MANAGE"}, PATH},
303312
{"authorization", "tokens", "authorization", []string{"CAN_USE"}, SIMPLE},
304313
{"authorization", "passwords", "authorization", []string{"CAN_USE"}, SIMPLE},
305-
{"sql_endpoint_id", "warehouses", "sql/warehouses", []string{"CAN_USE", "CAN_MANAGE"}, SIMPLE},
314+
{"sql_endpoint_id", "warehouses", "sql/warehouses", []string{"CAN_USE", "CAN_MANAGE", "IS_OWNER"}, SIMPLE},
306315
{"sql_dashboard_id", "dashboard", "sql/dashboards", []string{"CAN_EDIT", "CAN_RUN", "CAN_MANAGE", "CAN_VIEW"}, SIMPLE},
307316
{"sql_alert_id", "alert", "sql/alerts", []string{"CAN_EDIT", "CAN_RUN", "CAN_MANAGE", "CAN_VIEW"}, SIMPLE},
308317
{"sql_query_id", "query", "sql/queries", []string{"CAN_EDIT", "CAN_RUN", "CAN_MANAGE", "CAN_VIEW"}, SIMPLE},

permissions/resource_permissions_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,10 @@ func TestResourcePermissionsCreate_SQLA_Endpoint(t *testing.T) {
823823
UserName: TestingUser,
824824
PermissionLevel: "CAN_USE",
825825
},
826+
{
827+
UserName: TestingAdminUser,
828+
PermissionLevel: "IS_OWNER",
829+
},
826830
{
827831
UserName: TestingAdminUser,
828832
PermissionLevel: "CAN_MANAGE",
@@ -845,6 +849,10 @@ func TestResourcePermissionsCreate_SQLA_Endpoint(t *testing.T) {
845849
UserName: TestingAdminUser,
846850
PermissionLevel: "CAN_MANAGE",
847851
},
852+
{
853+
UserName: TestingAdminUser,
854+
PermissionLevel: "IS_OWNER",
855+
},
848856
},
849857
},
850858
},

0 commit comments

Comments
 (0)