安全角色管理

重要

在 Kusto 群集上更改授权规则之前,请阅读以下内容:Kusto 访问控制概述基于角色的授权

本文介绍了用于管理安全角色的控制命令。 安全角色定义哪些安全主体(用户和应用程序)有权对受保护的资源(例如数据库或表)进行操作,以及允许进行哪些操作。 例如,对于特定的数据库,具有 database viewer 安全角色的主体可以查询和查看该数据库的所有实体(受限制的表除外)。

安全角色可以与安全主体或安全组(可以有其他安全主体或其他安全组)相关联。 当安全主体尝试对受保护的资源进行操作时,系统将检查该主体是否与至少一个授权对资源执行此操作的安全角色相关联。 这称为授权检查。 授权检查失败会中止操作。

注意

若要更改安全主体,你必须是数据库管理员或所有数据库管理员。

安全角色管理命令

语法

VerbSecurableObjectTypeSecurableObjectNameRole [(ListOfPrincipals) [Description]]

参数

  • Verb 指示要执行的操作类型:.show.add.drop.set

    谓词 说明
    .add 将一个或多个主体添加到角色。
    .drop 从角色中删除一个或多个主体。
    .set 将角色设置为特定主体列表,并删除所有以前的主体(如果有)。
  • SecurableObjectType 是指定了其角色的对象的类型。

    SecurableObjectType 说明
    database 指定的数据库
    table 指定的表
    materialized-view 指定的具体化视图
  • SecurableObjectName 是对象的名称。

  • Role 是相关角色的名称。

    角色 说明
    admins 对安全对象具有控制权,包括查看、修改和删除对象及所有子对象的功能。
    users 可以查看安全对象,并在其下创建新对象。
    viewers 可以查看安全对象。
    unrestrictedviewers 仅在数据库级别,向数据库中启用了受限视图策略的所有表的 adminsviewersusers 授予查看权限。 除了 adminsviewersusers 角色之外,还可以使用此角色。
    ingestors 仅在数据库级别允许将数据引入到所有表中。
    monitors 在指定的范围(Database 或 AllDatabases),允许元数据(架构、操作、权限)查看操作。
  • ListOfPrincipals 是可选的、以逗号分隔的安全主体标识符列表(string 类型的值)。

  • Description 是与关联一起存储的 string 类型的可选值,用于将来的审核。

.show 命令

.show 命令列出在安全对象上设置的主体。 为分配给主体的每个角色返回一行。

语法

.showSecurableObjectTypeSecurableObjectNameprincipals

示例

以下控制命令列出对数据库中的 StormEvents 表具有某些访问权限的所有安全主体:

.show table StormEvents principals

下面是此命令的可能结果:

角色 PrincipalType PrincipalDisplayName PrincipalObjectId PrincipalFQN
Apsty 数据库管理员 Azure AD 用户 Mark Smith cd709aed-a26c-e3953dec735e aaduser=msmith@fabrikam.com

管理数据库安全角色

.setdatabaseDatabaseNameRolenone [skip-results]

.setdatabaseDatabaseNameRole(Principal [,Principal...] ) [skip-results] [Description]

.adddatabaseDatabaseNameRole(Principal [,Principal...] ) [skip-results] [Description]

.dropdatabaseDatabaseNameRole(Principal [,Principal...] ) [skip-results] [Description]

第一个命令从角色中删除所有主体。 第二个命令从角色中删除所有主体,并设置一组新的主体。 第三个命令向角色中添加新的主体,不删除现有主体。 最后一个命令从角色中删除指定的主体,并保留其他主体。

其中:

  • DatabaseName 是要修改其安全角色的数据库的名称。

  • Role 是 adminsingestorsmonitorsunrestrictedviewersusersviewers

  • Principal 是一个或多个主体。 请参阅主体和标识提供者,了解如何指定这些主体。

  • skip-results(如果已提供)会要求命令不返回更新的数据库主体列表。

  • Description(如果已提供)是将与更改关联的文本,可通过相应的 .show 命令进行检索。

示例

// No need to specify AAD tenant for UPN, as Kusto performs the resolution by itself
.add database Test users ('aaduser=imikeoein@fabrikam.com') 'Test user (AAD)'

// AAD SG on 'fabrikam.com' tenant
.add database Test admins ('aadGroup=SGEmail@fabrikam.com')

// OPTIONAL: AAD App on another tenant - by tenant guid
.add database Test viewers ('aadapp=4c7e82bd-6adb-46c3-b413-fdd44834c69b;9752a91d-8e15-44e2-aa72-e9f8e12c3ec5') 'Test app on another tenant (AAD)'

管理表安全角色

.settableTableNameRolenone [skip-results]

.settableTableNameRole(Principal [,Principal...] ) [skip-results] [Description]

.addtableTableNameRole(Principal [,Principal...] ) [skip-results] [Description]

.droptableTableNameRole(Principal [,Principal...] ) [skip-results] [Description]

第一个命令从角色中删除所有主体。 第二个命令从角色中删除所有主体,并设置一组新的主体。 第三个命令向角色中添加新的主体,不删除现有主体。 最后一个命令从角色中删除指定的主体,并保留其他主体。

其中:

  • TableName 是要修改其安全角色的表的名称。

  • Role 是 adminsingestors

  • Principal 是一个或多个主体。 请参阅主体和标识提供者,了解如何指定这些主体。

  • skip-results(如果已提供)会要求命令不返回更新的表主体列表。

  • Description(如果已提供)是将与更改关联的文本,可通过相应的 .show 命令进行检索。

示例

// No need to specify AAD tenant for UPN, as Kusto performs the resolution by itself
.add table TestTable admins ('aaduser=imikeoein@fabrikam.com') 'Test user (AAD)'

// AAD SG on 'fabrikam.com' tenant
.add table TestTable ingestors ('aadGroup=SGEmail@fabrikam.com')

// OPTIONAL: AAD App on another tenant - by tenant guid
.add table TestTable ingestors ('aadapp=4c7e82bd-6adb-46c3-b413-fdd44834c69b;9752a91d-8e15-44e2-aa72-e9f8e12c3ec5') 'Test app on another tenant (AAD)'

管理具体化视图安全角色

.showmaterialized-viewMaterializedViewNameprincipals

.setmaterialized-viewMaterializedViewNameadmins(Principal,[Principal...])

.addmaterialized-viewMaterializedViewNameadmins(Principal,[Principal...])

.dropmaterialized-viewMaterializedViewNameadmins(Principal,[Principal...])

其中:

  • MaterializedViewName 是要修改其安全角色的具体化视图的名称
  • Principal 是一个或多个主体。 请参阅主体和标识提供者

管理函数安全角色

.setfunctionFunctionNameRolenone [skip-results]

.setfunctionFunctionNameRole(Principal [,Principal...] ) [skip-results] [Description]

.addfunctionFunctionNameRole(Principal [,Principal...] ) [skip-results] [Description]

.dropfunctionFunctionNameRole(Principal [,Principal...] ) [skip-results] [Description]

第一个命令从角色中删除所有主体。 第二个命令从角色中删除所有主体,并设置一组新的主体。 第三个命令向角色中添加新的主体,不删除现有主体。 最后一个命令从角色中删除指定的主体,并保留其他主体。

其中:

  • FunctionName 是要修改其安全角色的函数的名称。

  • Role 始终为 admin

  • Principal 是一个或多个主体。 请参阅主体和标识提供者,了解如何指定这些主体。

  • skip-results(如果已提供)会要求命令不返回更新的函数主体列表。

  • Description(如果已提供)是将与更改关联的文本,可通过相应的 .show 命令进行检索。

示例

.add function MyFunction admins ('aaduser=imike@fabrikam.com') 'This user should have access'