文章目录
基于资源的服务和策略
配置资源的服务
配置一个基于资源的服务:HBase
配置一个基于资源的服务:HDFS
配置一个基于资源的服务:Hive
配置一个基于资源的服务:Kafka
配置一个基于资源的服务:Knox
配置一个基于资源的服务:Solr
配置一个基于资源的服务:Storm
配置一个基于资源的服务:YARN
配置一个基于资源的服务:Atlas
配置资源的策略
配置一个基于资源的策略:HBase
配置一个基于资源的策略:HDFS
配置一个基于资源的策略:Hive
配置一个基于资源的策略:Kafka
配置一个基于资源的策略:Knox
配置一个基于资源的策略:Solr
配置一个基于资源的策略:Storm
配置一个基于资源的策略:YARN
配置一个基于资源的策略:Atlas
基于资源的策略中的通配符和变量
基于资源的导入导出策略
为特定服务导入基于资源的策略
为所有服务导入基于资源的策略
导出特定服务的基于资源的策略
导出所有服务的所有基于资源的策略
在Hive中的行级过滤和列屏蔽
Hive行级过滤与Ranger策略
Hive动态资源为基础的列屏蔽与Ranger策略
Hive动态标签为基础的列屏蔽与Ranger策略
使用Apache Ranger提供授权 – 01
基于资源的服务和策略
配置资源的服务
当您登录到Ranger控制台时,将显示基于资源的策略的服务管理器页面。您也可以通过选择Access Manager > Resource Based Policies来访问这个页面。您可以使用此页面为Hadoop资源(HDFS、HBase、Hive等)创建服务,并向这些资源添加访问策略。
要添加新的基于资源的服务
,单击服务管理器页面上的使用框中的add图标。输入所需的配置设置,然后单击Add。
要编辑基于资源的服务
,请单击服务右侧的edit图标。编辑服务设置,然后单击Save保存更改。
要删除基于资源的服务
,请单击服务右侧的delete图标。删除服务也会删除该服务的所有策略。
配置一个基于资源的服务:HBase
在服务管理器页面上,单击HBase旁边的Add图标,这时将出现创建服务页面。
在创建服务页面上输入以下信息
标签
描述
Service Name*
服务名称,需要在代理配置中指定服务名称(默认服务名称集群名称_组件名称
,可以自己随意定义)
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于HBase
Username*
可用于连接的终端系统用户名(如:hbase)
Password*
输入上面用户名的密码(如:admin)
hadoop.security.authentication*
指定身份验证类型(Simple, Kerberos)
hbase.master.kerberos.principal
1.属性指定Kerberos主体HBase Master(只适用于支持Kerberos的环境) 2.HBase主服务器的Kerberos主体(只有在启用Kerberos身份验证时才需要)
hbase.security.authentication*
设置必须与此属性(Simple, Kerberos)的hbase-site.xml设置匹配
hbase.zookeeper.property.clientPort*
设置必须与此属性的hbase-site.xml设置匹配(默认值为:2181)
hbase.zookeeper.quorum*
设置必须与此属性的hbase-site.xml设置匹配
zookeeper.znode.parent*
设置必须与此属性的hbase-site.xml设置匹配
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:HDFS
在服务管理器页面上,单击HDFS旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于HDFS
Username*
可用于连接的终端系统用户名(如:hdfs)
Password*
填写上面用户名的密码(如:admin)
Namenode URL*
hdfs://NAMENODE_FQDN:8020,Hadoop HDFS服务的位置,如Hadoop配置文件core-site.xml中所述,或者(如果这是一个HA环境)主NameNode的路径。该字段以前名为fs.defaultFS
Authorization Enabled
授权包括限制对资源的访问。如果启用,用户需要授权凭据
Authentication Type*
使用的授权类型,如hadoop配置文件core-site.xml中所述,指定身份验证类型(Simple, Kerberos)(只有在启用授权时才需要)
hadoop.security.auth_to_local
使用Hadoop将登录凭据映射到用户名;使用hadoop配置文件core-site.xml中记录的值
dfs.datanode.kerberos.principal
与服务所在的datanode相关联的主体,如hadoop配置文件hdfs-site.xml中所述。(只有在启用Kerberos身份验证时才需要)
dfs.namenode.kerberos.principal
与服务所在的NameNode相关联的主体,如hadoop配置文件hdfs-site.xml中所述。(只有在启用Kerberos身份验证时才需要)
dfs.secondary.namenode.kerberos.principal
与服务所在的次要NameNode相关联的主体,如hadoop配置文件hdfs-site.xml中所述。(只有在启用Kerberos身份验证时才需要)
RPC Protection Type
只有授权用户才能查看,使用和贡献数据集;安全SASL连接的保护值列表。价值观:Authentication(认证);Integrity(完整);Privacy(隐私)
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:Hive
在服务管理器页面上,单击Hive旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于Hive
Username*
指定可用于连接的最终系统用户名(如:hive)
Password*
添加上面用户名的密码(如:admin)
jdbc.driverClassName*
用于Hive连接的驱动程序的完整类名。默认值:org.apache.hive.jdbc.HiveDriver
jdbc.url*
jdbc:hive2://HIVE_FQDN:10000
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
通常,Ranger Hive服务定义使用HiveServer2 (HS2) JDBC驱动程序来获取用于资源查找和测试连接的Hive数据库/表信息。或者,您可以配置服务定义,使用Hive metastore库直接连接到Hive metastore数据库。当在您的集群上很难设置HiveServer2时,比如在将HDCloud用于AWS时,建议这样做。
在Ambari>Hive>Configs>Advanced,编辑hive属性
将以下属性添加到custom ranger-hive-plugin-properties属性中
ranger.service.config.param.enable.hive.metastore.lookup = true
ranger.service.config.param.hive.site.file.path = /etc/hive/conf/hive-site.xml
3. 保存并重新启动所需的组件 4. 要测试配置是否成功,请创建一个新的Hive服务并指定jdbc.url为“none”,然后运行测试连接
配置一个基于资源的服务:Kafka
在服务管理器页面上,单击Kafka旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于Kafka
Username*
指定可用于连接的最终系统用户名(如:kafka)
Password*
添加上面用户名的密码(如:admin)
Zookeeper Connect String*
默认为localhost:2181(提供zookeeper host:2181的FQDN)
Ranger Plugin SSL CName
提供common.name.for.certificate,该证书在Ranger中注册(在有线加密环境中) ,指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:Knox
在服务管理器页面上,单击Knox旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择一个基于标记的服务,将该服务及其基于标记的策略应用到Knox
Username*
指定可用于连接的最终系统用户名(如:admin)
Password*
添加上面用户名的密码(如:admin)
knox.url*
Knox的网关URL
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:Solr
在服务管理器页面上,单击Solr旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将服务及其基于标记的策略应用于Solr
Username*
指定可用于连接的最终系统用户名(如:solr)
Password*
添加上面用户名的密码(如:admin)
Solr URL*
对于HDP搜索的Solr实例:http://solr_host:8983 ;对于Ambari Infra的Solr实例:http://solr_host:8886
Ranger Plugin SSL CName
提供common.name.for.certificate,该证书在Ranger中注册(在有线加密环境中),指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:Storm
在服务管理器页面上,单击Storm旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于Storm
Username*
指定可用于连接的最终系统用户名(如:stormtestuser)
Password*
添加上面用户名的密码(如:admin)
Nimbus URL*
nimbus格式的主机名http://<ipaddress
>:8744,该字段以前名为nimbus.url
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置 tag.download.auth.users:storm,storm-hdv4 policy.download.auth.users:storm,storm-hdv4 ambari.service.check.user:storm,storm-hdv4
单击 Test Connection
单击 Add
配置一个基于资源的服务:YARN
在服务管理器页面上,单击YARN旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将该服务及其基于标记的策略应用于yarn
Username*
指定可用于连接的最终系统用户名(如:yarn)
Password*
添加上面用户名的密码(如:admin)
YARN REST URL*
http or https: //RESOURCEMANAGER_FQDN:8088
Authentication Type
使用的授权类型,如hadoop配置文件core-site.xml中所述;Simple或Kerberos。(只有在启用授权时才需要)
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置一个基于资源的服务:Atlas
在服务管理器页面上,单击Atlas旁边的Add图标,这时将出现创建服务页面。
在创建服务页面中输入以下信息
标签
描述
Service Name*
服务的名称,需要在代理配置中指定服务名称
Description
提供该服务的描述以供参考
Active Status
可以选择此选项来启用(Enabled)或禁用(Disabled)服务
Select Tag Service
选择基于标记的服务,将服务及其基于标记的策略应用于Atlas
Username*
指定可用于连接的最终系统用户名(如:admin)
Password*
添加上面用户名的密码(如:admin)
atlas.rest.address*
Atlas主机和端口:http://atlas_host_FQDN:21000
Common Name for Certificate
指定证书的公共名称,在创建服务页面中,此字段可互换地命名为“Common Name For Certificate和Ranger Plugin SSL CName”
Add New Configurations
指定任何其他新配置
单击 Test Connection
单击 Add
配置资源的策略
要查看与服务关联的策略,请单击基于资源的策略服务管理器页面上的服务名称。该服务的策略将与搜索框一起显示在列表中。
要将基于资源的新策略添加到服务
,请单击“Add New Policy”
要编辑基于资源的策略
,请单击该服务条目右侧的edit图标。编辑策略设置,然后单击Save保存更改
要删除基于资源的策略
,请单击该服务条目右侧的delete图标
配置一个基于资源的策略:HBase
在服务管理器页面上,选择HBase下的现有服务。 策略列表页面出现
单击Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
HBase Table*
选择适当的表。可以为特定策略选择多个表。这个字段是强制性的
HBase Column-family*
对于选定的表,选择将适用该策略的列族
HBase Column*
对于选定的表和列族,选择策略将适用于其的列
Description
对策略适当描述
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权;从用户组列表中选择一个特定的组并为该组选择权限。选择admin权限将指定该组为所选资源的admin
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略);从用户列表中选择一个特定的用户并为该用户选择权限。选择admin权限将指定用户为所选资源的admin
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
权限
描述
Read
允许用户执行读取操作
Write
允许用户执行写操作
Create
允许用户执行创建操作
Admin
这将为用户提供委托的管理访问
Select/Deselect All
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
从命令行提供对HBase数据库表的用户访问 HBase提供了从命令行直接管理用户对HBase数据库表的访问的方法。最常用的命令是:
语法:grant '','','
例如,要创建授予user1对usertable表的读/写权限的策略,命令应该是
grant 'user1','RW','usertable'
授予CREATE和ADMIN权限的语法是相同的
语法:revoke '',''
例如,要取消user1对表usertable的读/写访问权限,可以使用以下命令
revoke 'user1','usertable'
注意:与Hive不同,HBase没有针对每个用户特权的特定撤销命令
配置一个基于资源的策略:HDFS
通过配置,Apache Ranger允许检查用户请求的Ranger策略和HDFS权限。当NameNode接收到用户请求时,Ranger插件检查通过Ranger服务管理器设置的策略。如果没有策略,Ranger插件将检查HDFS中设置的权限。
我们建议在Ranger服务管理器中创建权限,并在HDFS级别具有限制性权限。
在服务管理器页面上,选择HDFS下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。不能为相同的服务类型(HDFS)复制此名称。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Resource Path*
为策略文件夹/文件定义资源路径。为了避免提供完整路径或为所有子文件夹或文件启用策略,您可以使用通配符(例如/home*)完成此路径,或者指定策略应该是递归的
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Delegate Admin
当策略被分配给一个用户或一组用户时,这些用户将成为委托的管理员。被授权的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
权限
描述
Read
允许用户执行读取操作
Write
允许用户执行写操作
Execute
允许用户执行执行操作
Select/Deselect All
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
配置一个基于资源的策略:Hive
在服务管理器页面上,选择Hive下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的。默认情况下启用策略
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
database*
键入适用的数据库名称。自动完成功能根据输入的文本显示可用的数据库;默认选择Include以允许访问。选择Exclude以拒绝访问
table*
要继续添加基于表的策略,请选中表;键入适用的表名。自动完成功能根据输入的文本显示可用的表;默认选择Include以允许访问。选择Exclude以拒绝访问
udf*
要继续添加基于UDF的策略,请选择UDF;键入适用的UDF名称。自动完成功能根据输入的文本显示可用的表;我们还可以为UDF设置策略。用户定义的函数。输入适当的udf。;默认选择Include以允许访问。选择Exclude以拒绝访问
Hive Column*
键入适用的Hive列名称。自动完成功能根据输入的文本显示可用的列;默认选择Include以允许访问。选择Exclude以拒绝访问;如果在HiveServer2或HiveServer2-LLAP中使用Ranger Hive插件,其中列或描述权限包括全部,则必须为Hive列设置一个参数以按预期显示:在Ambari>Hive中,在ranger-hive-security.xml输入:xasecure.hive.describetable.showcolumns.authorization.option=show-all。未能设置此参数将导致错误消息hiveaccesscontrollexception
URL*
指定云存储路径(例如s3a://dev-admin/demo/campaix .txt),其中需要终端用户权限才能将Hive数据从/写到云存储路径;权限:URL上的读操作允许用户执行HiveServer2操作,该操作使用S3作为Hive表的数据源。URL上的写操作允许用户执行HiveServer2操作,将数据写到指定的S3位置;该特性是一个技术预览:它还没有准备好进行生产部署
url*
Hive插入覆盖查询需要一个Ranger URI策略来允许写操作,即使用户拥有通过HDFS策略授予的写权限,未能指定此字段将导致以下错误:Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [jdoe] does not have [WRITE] privilege on [/tmp/*] (state=42000,code=40000),示例值:/tmp/*
hiveservice*
hiveservice仅与Permissions=Service Admin 一起使用。允许在Ranger中拥有服务管理权限的用户运行kill query API: kill query 。支持值:*
global*
Description
对策略适当描述;如果在HiveServer2或HiveServer2-LLAP中使用Ranger Hive插件,其中列或描述权限包括全部,则必须为Hive列设置一个参数以按预期显示:在Ambari>Hive中,在ranger-hive-security.xml输入:xasecure.hive.describetable.showcolumns.authorization.option=show-all。未能设置此参数将导致错误消息hiveaccesscontrollexception
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定此策略应用于的组。若要将该组指定为所选资源的管理员,请选中“委托管理”复选框。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的一个或多个用户。若要将该组指定为所选资源的管理员,请选中“委托管理”复选框。(管理员可以根据现有策略创建子策略)
Delegate Admin
当选择委托管理时,管理权限将分配给适用的用户和组。受委托的管理员可以更新和删除策略,还可以基于原始策略创建子策略
include/exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定字段中输入的所有表名或列名
enable/disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
权限
描述
select
允许用户执行选择操作
update
允许用户执行更新操作
Create
允许用户执行创建操作
Drop
允许用户执行删除操作
Alter
允许用户执行Alter操作
Index
允许用户执行索引操作
Lock
允许用户对指定的资源执行锁定操作
All
允许用户执行所有操作
Read
允许用户执行可读操作
Write
允许用户执行可写操作
ReplAdmin
Service Admin
服务管理
Temporary UDF Admin
临时UDF管理
Select/Deselect all
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
从命令行提供对Hive数据库表的用户访问 Hive提供了管理用户直接从命令行访问Hive数据库表的方法。最常用的命令是:
语法:grant on table to user ;
例如,要创建在default-hivesmoke22074表上授予user1 SELECT权限的策略,命令应该是
grant select on table default.hivesmoke22074 to user user1;
授予UPDATE、CREATE、DROP、ALTER、INDEX、LOCK、ALL和ADMIN权限的语法是相同的。
语法:revoke on table from user ;
例如,取消user1对表默认值的选择权限。hivesmoke22074,命令将是
revoke select on table default.hivesmoke22074 from user user1;
对于撤销UPDATE、CREATE、DROP、ALTER、INDEX、LOCK、ALL和ADMIN权限,语法是相同的
配置一个基于资源的策略:Kafka
在服务管理器页面上,选择Kafka下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Topic*
kafka资源类型。主题是发布消息的类别或提要名称
Transactional id*
Kafka资源类型,以持久的方式唯一地标识生产者
Cluster*
Kafka资源类型
Delegation Token*
Kafka资源类型,用于身份验证
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Add Validity Period
指定策略的开始和结束时间
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Policy Conditions (applied at the policy level)
单击+图标,然后指定一个IP地址范围
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
normal/override
使您能够指定覆盖策略。选择override时,策略中的访问权限将覆盖现有策略中的访问权限。此功能可与“添加有效期”一起使用,以创建覆盖现有策略的临时访问策略
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
标签
描述
Publish
向kafka主题生成器发布消息的过程
Consume
在流程中只使用主题中分区的子集
Configure
配置kafka代理/集群
Describe
获取主题元数据的权限
Create
允许创建主题
Delete
允许删除主题
Kafka Admin
允许管理kafka
Idempotent Write
允许等幂写权限
Describe Configs
允许描述配置
Alter Configs
允许修改配置
Select/Deselect All
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
配置一个基于资源的策略:Knox
在服务管理器页面上,选择Knox下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Knox Topology*
输入适当的拓扑名称
Knox Service*
输入适当的服务名称
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Policy Conditions
指定IP地址范围
Permissions
添加或编辑权限: Allow
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
由于Knox没有提供将特权或角色分配给用户的命令行方法,所以Knox创建策略表单的用户和组权限部分特别重要
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
配置一个基于资源的策略:Solr
在服务管理器页面上,选择Solr下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Solr Collection*
对于HDP搜索的Solr实例:http:host_ip:8983/ Solr; 对于Ambari Infra的Solr实例:http:host_ip:8886/ Solr
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Policy Conditions
指定IP地址范围
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
权限
描述
Query
Update
Others
Solr Admin
Select/Deselect All
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
配置一个基于资源的策略:Storm
在服务管理器页面上,选择Storm下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Storm Topology*
输入适当的拓扑名称
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
由于Storm没有提供给用户分配特权或角色的命令行方法,所以Storm创建策略表单的用户和组权限部分特别重要
权限
描述
Submit Topology
允许用户提交拓扑
File Upload
允许用户上传文件
File Download
允许用户下载文件
Kill Topology
允许用户终止拓扑
Rebalance
允许用户重新平衡拓扑
Activate
允许用户激活拓扑
Deactivate
允许用户停用拓扑
Get Topology Conf
允许用户访问拓扑配置
Get Topology
允许用户访问拓扑
Get User Topology
允许用户访问用户拓扑
Get Topology Info
允许用户访问拓扑信息
Upload New Credential
允许用户上传新的凭证
Select/Deselect All
全选/取消全选
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
配置一个基于资源的策略:YARN
在“服务管理器”页面上,选择Yarn下的现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
Queue*
yarn调度的基本单位
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
权限
描述
submit-app
允许用户提交队列
admin-queue
允许用户管理队列
Select/Deselect All
全选/取消全选
单击 Add
配置一个基于资源的策略:Atlas
在服务管理器页面上,在Atlas下选择一个现有服务 策略列表页面出现
单击 Add New Policy,将出现Create Policy页面
按照以下步骤完成创建策略页面
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。这个字段是强制性的
Policy Label
为这个策略指定一个标签。您可以根据这些标签搜索报告和筛选策略
type-category/entity-type/atlas-service/relationship-type*
选择实体、类型、操作、分类或术语
Description
描述政策的目的
Audit Logging
指定是否审计此策略。(取消选择以禁用审计)
Select Group
指定应用此策略的组。若要将该组指定为所选资源的管理员,请指定管理权限。(管理员可以根据现有策略创建子策略);public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的特定用户(在已指定的组之外),或将特定用户指定为此策略的管理员。(管理员可以根据现有策略创建子策略)
Delegate Admin
当将策略分配给一个用户或一组用户时,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除策略。它还可以基于原始策略(基本策略)创建子策略
Enable/Disable
默认情况下,策略是启用的。您可以禁用策略来限制该策略的用户/组访问
Include/Exclude
include标志意味着它将考虑字段中输入的值。默认值设置为include。exclude标志将排除在该特定文件中输入的所有表名或列名
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推
单击 Add
基于资源的策略中的通配符和变量
在基于资源的策略中引用通配符和变量
Ranger授权资源策略通配符
,可以在资源路径、数据库名、表名或列名中包含通配符 *
表示字符的出现次数为零或以上(大于等于0) ?
表示单个字符
Ranger授权资源策略{USER}变量
,变量{USER}可以用来自动填充正在访问的用户,例如: 在Select User中,选择{User} 在Resource Path中,输入data_{USER}
Ranger授权资源策略{USER}变量推荐的做法和可定制性
Ranger要求使用字符串“{USER}”来表示访问用户,即Ranger策略中的策略项中的用户。但是,Ranger提供了一种灵活的方法来定制字符串,该字符串被用在策略资源规范中表示访问用户名的简写。默认情况下,Ranger策略及资源规格期望字符“{”和“}”作为字符串“USER”的分隔符,但是,ranger支持自定义方式来指定分隔符字符、转义这些分隔符和字符串“USER”本身,方法是在ranger支持的每个组件的服务定义中,在每个资源级的基础上用另一个用户指定的字符串作为前缀。 例如,如果对于某个HDFS安装,如果路径名可能包含“{”或“}”作为有效字符,但不包含“%”字符,则可以将HDFS的服务定义指定为:
"resources" : [
{
"itemId" : 1 ,
"name" : "path" ,
"type" : "path" ,
"level" : 10 ,
"parent" : "" ,
"mandatory" : true ,
"lookupSupported" : true ,
"recursiveSupported" : true ,
"excludesSupported" : false ,
"matcher" : "org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher" ,
"matcherOptions" : { "wildcard" : true , "ignoreCase" : false } , "replaceTokens" : true , "tokenDelimiterStart" : "%" , "tokenDelimiterEnd" : "%" , "tokenDelimiterPrefix" : "rangerToken:" }
"validationRegEx" : "" ,
"validationMessage" : "" ,
"uiHint" : "" ,
"label" : "Resource Path" ,
"description" : "HDFS file or directory path"
}
]
HDFS用例的相应Ranger策略如下:
resource: path= / home/ % rangerToken: USER %
user: { USER }
permissions: all, delegateAdmin= true
以下可定制matcherOptions可用于此功能:
replacetoken:
如果在运行时需要用当前用户的名字替换resource-spec中的用户名缩写,则为true;如果需要按原样解释资源规范,则为false。默认值:真的。
tokenDelimiterStart:
标识资源规范中当前用户的短消息的开始字符。默认值:{。
tokenDelimiterEnd:
标识资源规范中当前用户的短消息的结束字符。默认值:}。
tokenDelimiterEscape:
标识用于在资源规范中转义到kendelimiterstart或tokenDelimiterEnd值的转义字符。默认值:\。
tokenDelimiterPrefix:
标识在资源规范中与字符串“USER”一起构成当前用户名称的特殊前缀。默认值:.
基于资源的导入导出策略
您可以在恢复操作期间,或者在将策略从测试集群转移到生产集群时,从Ranger管理UI导出和导入策略,以实现集群弹性(备份)。您可以导出/导入策略的特定子集(例如与特定资源或用户/组相关的策略子集),或者通过管理员UI克隆整个存储库(或多个存储库)
界面 您可以从Access Manager页面导入和导出策略 您还可以从Reports页面导出策略
Access Manager 页面
Reports 页面
格式
JSON
JSON、Excel、CSV
过滤支持
No
Yes
特定的服务出口
Yes
Via filtering
过滤 从Reports页面导出时,可以在保存文件之前应用筛选器
输出格式 您可以以以下格式导出策略:Excel、JSON、CSV 注意:
导入策略不支持CSV格式 从Access Manager页面导出策略时,将自动以JSON格式下载这些策略。如果希望以Excel或CSV格式导出,请从Reports页面下拉菜单导出策略。
需要用户角色 管理员用户只能导入和导出基于资源和标签的策略。此用户的凭据是在admin_username(默认为admin/admin)字段中的Ranger Configs > Advanced ranger-env中设置的。 Ranger KMS keyadmin用户只能导入和导出KMS策略。这个用户的默认凭证是keyadmin/keyadmin
局限性 要成功导入策略,请使用以下数据库版本:
MariaDB: 10.1.16+
MySQL: 5.6.x+
Oracle: 11gR2+
PostgreSQL: 8.4+
MS SQL: 2008 R2+
为特定服务导入基于资源的策略
在Access Manager页面,点击服务旁边的Import图标: 导入策略页面打开
选择要导入的文件,您只能以JSON格式导入策略
(可选)配置导入操作: Override Policy(重载策略)选项删除目标存储库的所有策略 服务映射将下载的文件存储库,即源存储库映射到目标存储库
点击 Import,将出现一条确认消息:“成功:文件导入成功。”
为所有服务导入基于资源的策略
从Access Manager页面,单击Import按钮 导入策略页面打开
选择要导入的文件。您只能以JSON格式导入策略。
(可选)配置导入操作: Service Types
使您能够从导入中删除特定的服务。 Override Policy
选项删除目标存储库的所有策略。 Service Mapping
将下载的文件存储库,即源存储库映射到目标存储库。
单击 Import,将出现一条确认消息:“成功:文件导入成功。”
导出特定服务的基于资源的策略
如果希望以Excel或CSV格式导出,请从Reports页面下拉菜单导出策略
从Access Manager页面,单击服务旁边的Export图标 导出策略页面打开
点击导出按钮,该文件以JSON文件的形式下载到浏览器中。
导出所有服务的所有基于资源的策略
如果希望以Excel或CSV格式导出,请从Reports页面下拉菜单导出策略 从Access Manager页面:
点击导出按钮 导出策略页面打开
删除组件或特定服务并单击Export 该文件以JSON文件的形式下载到浏览器中
从报告页:
在导出文件之前应用过滤器
打开导出下拉菜单
选择文件格式。文件在浏览器中下载
在Hive中的行级过滤和列屏蔽
可以使用Apache Ranger行级筛选器
设置Hive表中的行访问策略。您还可以使用Ranger列屏蔽
来设置屏蔽Hive列中的数据的策略,例如仅显示列数据的前四个字符。
Hive行级过滤与Ranger策略
行级过滤有助于简化Hive查询。通过将访问限制逻辑移到Hive层,Hive在每次尝试数据访问时应用访问限制。这有助于简化Hive查询的编写,并提供了无缝的行级分段的幕后执行,而不必将此逻辑添加到查询的谓词。
行级过滤也提高了Hadoop的可靠性
和健壮性
。通过为Hive表提供行级安全性并减少安全表面积,可以根据用户特征(如组成员关系)和发出此请求的运行时上下文将Hive数据访问限制到特定的行。
行级过滤的典型用例包括:
医院可以创建一个安全策略,该策略允许医生只查看自己的患者的数据行,并且允许保险索赔管理员只查看其特定站点的特定行。
银行可以根据员工的业务部门、地区或员工的角色创建一个策略来限制对几行财务数据的访问(例如:只有财务部门的员工才允许查看客户发票、付款和应计数据;只有欧洲的HR员工可以看到欧洲的员工数据)。
多租户应用程序可以创建每个租户数据的逻辑分离,以便每个租户只能看到自己的数据行。
可以使用Apache Ranger行级筛选器设置Hive表中的行访问策略。行级筛选器策略类似于其他Ranger访问策略。您可以为特定的用户、组和条件设置过滤器。
以下条件适用于使用行级过滤器:
筛选器表达式必须是表或视图的有效WHERE子句。
每个表或视图都应该有自己的行级筛选器策略。
数据库或表名不支持通配符匹配。
过滤器按照策略中列出的顺序进行评估。
每次将行级筛选器应用于表或视图时,都会生成一个审计日志项。
在服务管理器页面上,选择一个现有的Hive服务
选择“行级筛选器”选项卡,然后单击“添加新策略”
在Create Policy页面上,为行级过滤器添加以下信息
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。默认情况下启用策略
Hive Database*
键入适用的数据库名称。自动完成功能根据输入的文本显示可用的数据库
Hive Table*
键入适用的表名。自动完成功能根据输入的文本显示可用的表
Description
输入策略的可选描述
Audit Logging
审计日志默认设置为Yes。选择No关闭审计日志记录
Select Group
指定此策略应用到的组。public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的一个或多个用户
Access Types
当前select是唯一可用的访问类型。这将与行级筛选器字段中指定的WHERE子句一起使用
Row Level Filter
1. 要为指定的用户和组创建行筛选器,请单击“添加行筛选器”,然后在“输入筛选器表达式”框中键入有效的WHERE子句。 2. 若要允许指定用户和组在不受行级限制的情况下进行选择访问,请不要添加行筛选器(将设置保留为“添加行筛选器”)。 3.过滤器按照策略中列出的顺序进行评估。首先应用行筛选条件列表顶部的筛选器,然后应用第二、第三个筛选器,依此类推。
4. 若要在行筛选条件列表中移动条件(并因此更改对其求值的顺序),请单击条件行左侧的点行图标,然后将条件拖动到列表中的新位置。 5. 单击Add以添加新的行级筛选器策略。
Hive动态资源为基础的列屏蔽与Ranger策略
您可以使用Apache Ranger动态基于资源的列屏蔽功能来保护Hive中的敏感数据,几乎是实时的。您可以从Hive查询输出动态地设置屏蔽或匿名敏感数据列(如PII、PCI和PHI)的策略。例如,可以在列中屏蔽敏感数据,只显示前4个或后4个字符。
动态列屏蔽策略类似于Hive的其他Ranger访问策略。您可以为特定的用户、组和条件设置过滤器。使用动态列级屏蔽,敏感信息不会离开Hive,并且在使用应用程序或Hive层不需要更改。也不需要产生额外的受保护的重复版本的数据集。
当使用Ranger列屏蔽策略屏蔽Hive查询结果中返回的数据时,应用以下条件:
可以使用多种屏蔽类型,比如show last 4 characters、show first 4 characters、Hash、Nullify和date mask (show only year)。
可以为特定用户、组和条件指定屏蔽类型。
不支持通配符匹配。
每个列都应该有自己的屏蔽策略。
掩码按照策略中列出的顺序进行评估。
每次将屏蔽策略应用于列时都会生成一个审计日志项。
在服务管理器页面上,选择一个现有的Hive服务
选择选项卡,然后单击Add New Policy
在Create Policy页面上,为列屏蔽过滤器添加以下信息:
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。默认情况下启用策略
Hive Database*
键入适用的数据库名称。自动完成功能根据输入的文本显示可用的数据库
Hive Table*
键入适用的表名。自动完成功能根据输入的文本显示可用的表
Hive Column*
键入适用的列名。自动完成功能根据输入的文本显示可用的列
Description
输入策略的可选描述
Audit Logging
审计日志默认设置为Yes。选择No关闭审计日志记录
Select Group
指定此策略应用到的组。public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的一个或多个用户
Access Types
当前select是唯一可用的访问类型。这将与行级筛选器字段中指定的WHERE子句一起使用
选择屏蔽选项(Select Masking Option),要为指定的用户和组创建行筛选器,请单击“选择屏蔽选项”,然后选择屏蔽类型:
标签
描述
Redact
掩码所有带“x”的字母字符和所有带“n”的数字字符
Partial mask: show last 4
只显示最后四个字符
Partial massk: show first 4
只显示前四个字符
Hash
用整个单元格值的散列替换所有字符
Nullify
用空值替换所有字符
Unmasked (retain original value)
没有使用遮罩
Date: show only year
只显示日期字符串的年份部分,并将月和日默认为01/01
Custom
指定自定义屏蔽值或表达式。自定义屏蔽可以使用任何有效的Hive UDF (Hive返回的数据类型与被屏蔽列中的数据类型相同)
掩蔽条件按照策略中列出的顺序进行评估。首先应用屏蔽条件列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推。 4. 若要在掩码条件列表中移动条件(并因此更改对其求值的顺序),请单击条件行左侧的点行图标,然后将条件拖动到列表中的新位置。 5. 单击Add以添加新的列屏蔽筛选器策略
Hive动态标签为基础的列屏蔽与Ranger策略
选择Access Manager > Tag Based Policies,然后选择基于标记的服务
选择选项卡,然后单击Add New Policy
在Create Policy页面上,为列屏蔽过滤器添加以下信息:
标签
描述
Policy Name*
输入适当的策略名称。此名称不能在整个系统中重复。默认情况下启用策略
TAG*
输入适用的标签名称,例如MASK
Hive Table*
键入适用的表名。自动完成功能根据输入的文本显示可用的表
Description
输入策略的可选描述
Audit Logging
审计日志默认设置为Yes。选择No关闭审计日志记录
Select Group
指定此策略应用到的组。public组包含所有用户,因此授予对public组的访问权就授予了对所有用户的访问权
Select User
指定此策略应用于的一个或多个用户
Policy Conditions
单击“添加条件”以添加或编辑策略条件。当前“在到期日期后访问?”(是/否)是唯一可用的政策条件。要设置此条件,请在文本框中键入yes,然后选择绿色复选标记按钮以添加该条件
Access Types
当前hive和select是唯一可用的访问类型
选择屏蔽选项(Select Masking Option),要为指定的用户和组创建行筛选器,请单击“选择屏蔽选项”,然后选择屏蔽类型:
标签
描述
Redact
掩码所有带“x”的字母字符和所有带“n”的数字字符
Partial mask: show last 4
只显示最后四个字符
Partial massk: show first 4
只显示前四个字符
Hash
用整个单元格值的散列替换所有字符
Nullify
用空值替换所有字符
Unmasked (retain original value)
没有使用遮罩
Date: show only year
只显示日期字符串的年份部分,并将月和日默认为01/01
Custom
指定自定义屏蔽值或表达式。自定义屏蔽可以使用任何有效的Hive UDF (Hive返回的数据类型与被屏蔽列中的数据类型相同)
掩蔽条件按照策略中列出的顺序进行评估。首先应用屏蔽条件列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推。
您可以使用加号(+)来添加附加条件。条件按照保单中列出的顺序进行评估。首先应用列表顶部的条件,然后应用第二个条件,然后应用第三个条件,依此类推。
单击Add添加新策略
你可能感兴趣的:(Ranger)
15.6K Stars Yazi-超快终端文件管理器(全平台)
我最早知道的这类工具是Linux上的Ranger,后来找到一个能在Windows上用的lf,最近才知道的Yazi,感觉好多工具/功能都被用Rust和golang重新实现了一遍。Yazi(意为“鸭子”)是用Rust编写的终端文件管理器,基于非阻塞异步I/O。它旨在提供高效、用户友好且可自定义的文件管理体验。一篇解释其内部运作的新文章:为什么Yazi很快?完全异步支持:所有I/O操作都是异步的,CPU
方的ScalersTalk第四轮新概念朗读持续力训练Day203 20200301
daisy境界的彼方
练习材料:Weoftenreadinnovelshowaseeminglyrespectablepersonorfamilyhassometerriblesecretwhichhasbeenconcealedfromstrangersforyears.TheEnglishlanguagepossessesavividsayingtodescribethissortofsituation.Thete
seurat提取表达矩阵_10X scRNA免疫治疗学习笔记-3-走Seurat标准流程
幸福的小酒瓶
seurat提取表达矩阵
刘小泽写于19.10.15笔记目的:根据生信技能树的单细胞转录组课程探索10XGenomics技术相关的分析课程链接在:http://jm.grazy.cn/index/mulitcourse/detail.html?cid=55第二单元第7讲:走Seurat标准流程【文章结构总-分-总,结尾有完整的代码,熟悉者前面可以跳过,去看后面8min完成的代码】前言前面介绍了自己利用cellrangerc
HannahLin的ScalersTalk第四轮新概念朗读持续力训练Day 143 20190227
HannahLin
Lesson24-1AskeletoninthecupboardWeoftenreadinnovelshowaseeminglyrespectablepersonorfamilyhassometerriblesecretwhichhasbeenconcealedfromstrangersforyears.TheEnglishlanguagepossessesavividsayingtodescri
依据 坐标(经度-longitude、纬度-latitude)和范围(rangeRadius) 获取 符合条件的 坐标
叁金Coder
技术研讨 工具类 问题解决 java mysql 经纬度检索
使用Java+MySQL实现依据坐标(经度-longitude、纬度-latitude)和范围(rangeRadius)获取符合条件的坐标。1、纯MySQL实现(存在效率瓶颈)SELECT*FROM'location'WHERE(ACOS(SIN((23.146436*3.1415)/180)*SIN((latitude*3.1415)/180)--纬度字段+COS((23.146436*3.14
cellranger count使用
谢京合
1、如果你是直接拿到的R1/R2的fastq文件,那么就直接上cellrangercount。氮素,如果你是I1/R1/R2的数据,那就麻烦还要跑个cellrangermkfastq。因为我自己拿到的是R1/R2的fastq文件(如图),所以抱歉啦就直接从cellrangercount开始讲起啦。嘻嘻嘻~~~image.png这里有个问题(划重点):图中所示,我的名字是CC5-1_S1XXXX。但
一款人性化的终端用户界面工具
stubborn vegeta
开原大镖客 shell ui terminal linux shell
Acollectionofhumanfriendlyterminaluserinterface.截图历史文件预览注意:findfile依赖fzf.filebrowser依赖ranger/lf/…安装gitclonehttps://github.com/StubbornVegeta/StartUp~/.config/cd~/.config/StartUp./install.sh用法.$HOME/.c
The heart doesn't move, and it doesn't hurt.心不动,则不痛
三品姐姐
叁品姐姐每天分享一段爱情感悟,幸福可以很简单,点击右上角关注哦。孤独是一场无人送药的重感冒Lonelinessisaheavycoldwithnomedicine.回得了的地方,回不了的时光WhereIcangetback,Ican'tgetbacktothepast.你是我等不到的路人YouareastrangerIcan'twaitfor.期待,是所有心痛的根源。心不动,则不痛Expectat
【日更挑战】2022-05-27比赛日NOTES(季后赛)
扁圆柱体
日更挑战当前排名:第415天,第987名,排名较昨日前进1名。比赛日,官网给出每场比赛的Notes(极个别场次没有),翻译如下Rangers(1)vs.Hurricanes(3)Zibanejad连续4场得分(3球,1助攻),连续3场进球。他的6个季后赛进球中有3个都是强打进球;Fox成为自2014年RyanMcDonagh(13次)以来,第一位单次季后赛得到10个助攻的游骑兵后卫;Panarin
多可怕的恐怖片我都看过,这么甜的第一次见
Sir电影
这个夏天,什么和暑假最配?当然是西瓜,空调和《怪奇物语》。2016年暑假,网飞推出了这部带有恐怖元素的奇幻剧集,讲了几个小屁孩一路升级打怪,收获亲情、友情和爱情的故事。时隔一年多,万众期待的它终于在今年暑假档回归了!豪爽的网飞一次性放出8集,从第一季就开始追的肉叔自然不会错过,周末在家啃着瓜一口气看完全集。按捺不住激动的心情,今天就来跟大家唠唠它——怪奇物语第三季StrangerThingsSea
开源大数据集群部署(十)Ranger usersync部署
大数据
【IOS】Type ‘ChartDataSet‘ does not conform to protocol ‘RangeReplaceableCollection‘
Easonhe
IOS ios
问题IOS开发Charts集成时编译报错解决方法在ChartDataSet的中增加replaceSubrange的实现publicfuncreplaceSubrange(_subrange:Swift.Range,withnewElements:C)whereC:Collection,ChartDataEntry==C.Element{}解决!
kerberos 生成新用户和 keytab 文件
骑着蜗牛向前跑
大数据 kerberos 新用户 keytab 文件 添加
操作很简单登录认证中心kadmin.local增加用户kadmin.local:addprinc-pw******test1生成keytab文件kadmin.local:ktadd-k/root/test1.keytab-norandkeytest1退出认证中心上下文。测试kinit-kt/root/test1.keytabtest1如果想让Ranger捕获到test1用户,需要将该用户添加到li
MySQL 时间类型 DATE、DATETIME和TIMESTAMP
wyn_做自己
今日份鸡汤:发生了,接受。接下来,面对。勇敢面对也是成长~1、DATE、DATETIME和TIMESTAMP表达的时间范围TypeRangeRemarkDATE'1000-01-01'to'9999-12-31'只有日期部分,没有时间部分DATETIME'1000-01-0100:00:00'to'9999-12-3123:59:59'时间格式为YYYY-MM-DDhh:mm:ss,默认精确到秒T
iOS tableviewcell 上UItextfield 设置输入长度和最大值
New_卡迪熊
最近有做到一个功能,在UItextfield设置输入长度和最大值。先添加UItextfield代理,再添加代理方法如下:-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string{NSString*newString=[
R、python读取空间转录组的8种方式
生信小博士
python 服务器 linux
“空间转录组测序主要包括5个步骤,我们着重下游分析部分:空转数据分析和可视化。本篇主分享如何使用python和R读取空转数据,主要使用scanpystlearnseurat包”引言在正式开始之前,我们先看看cellranger流程跑完之后,空间转录组结果的数据组成,主要是两部分:1.表达矩阵文件夹2.空转图片文件夹1.表达矩阵文件夹2.表达矩阵文件夹另外:如果你对单细胞数据读取比较感兴趣,可以看我
CSS基础---新手入门级详解
(((φ(◎ロ◎;)φ)))牵丝戏安
css 前端
CSS:层叠样式表CSS(CascadingStyleSheets,层叠样式表),是一种用来为结构化文档添加样式(字体、间距和颜色)的计算机语言,css扩展名为.css。实例:CSS实例body{background-color:aquamarine;}h1{color:orangered;text-align:center;}p{font-family:"TimesNewRoman";font-
开源大数据集群部署(九)Ranger审计日志集成(solr)
大数据部署
作者:櫰木1、下载solr安装包并解压包tar-xzvfsolr-8.11.2.gzcdsolr-8.11.2执行安装脚本./bin/install_solr_service.sh/opt/solr-8.11.2.tgz安装后,会在/etc/default/下生成solr.in.sh文件。2、在rangeradmin下生成solr相关配置cd/opt/ranger-2.3.0-admin/cont
从10X单细胞bam文件中提取某一个细胞类型的bam
小潤澤
我们之前简单做了一下cellranger的上游分析单细胞上游软件cellranger从头说,得到的结果文件如下:如果我们要做下游分析,那么三个文件matrix.mtx,barcodes.tsv和genes.tsv存在于out/filtered_feature_bc_matrix文件夹下我们之前也简单介绍了一下这三个文件的构造单细胞表达矩阵文件转换,那么我们在下游分析中,细胞分群以后,我们会得到一些
【Data Procession】格兰杰因果检验
咸鱼鲸
Data Procession python 开发语言
数据处理方法汇总第一章格兰杰因果检验(Grangercausalitytest)文章目录数据处理方法汇总第一章格兰杰因果检验(Grangercausalitytest)一、格兰杰因果测试是什么?二、Python代码实现1.grangercausalitytests函数用法2.判别因果性3.绘制混淆矩阵4.涉及的函数介绍4.1np.zeros(a,b)4.2round(A,4)4.3pd.DataF
每天进步一点点,经典语录双语学习(46)
过好你的后半生
大家好!近期疫情又紧张了,愿我们每个人都保护好自己,也是在为祖国做贡献。让我们放好心态,快乐生活在每个当下。开心过好每一天!感恩遇见!❤️❤️❤️36、Povertyisstrangertoindustry.勤劳之人不受穷。poverty英[ˈpɒvəti]这里元音字母‘o’发短元音[ɒ],读音类似于语文的‘āo熬’;字母组合‘er’发短元音[ə],读音类似于语文的‘ē婀’;末尾的‘y’发短元音[
今年第一篇CSDN
Passion-优
python
一.前言无需多言,今年第一篇教大家点实用的二.利用Python制作对联importturtle#定义画春联及背景的方法defdrawChunLianBg(startX=0,startY=0,lenX=100,lenY=100):#设置边框色和背景填充色turtle.color('Yellow','OrangeRed')#抬笔,定位起点turtle.pu()turtle.goto(startX,st
Hello World
涵小涵在温村
Thisisamakeupdiaryforyesterday.WenttowhiterockandIonabeachparkwithRevisha.AndthenhadagatheringthingwithXuesong,Yaqian,Chenxi,andJason.Itiskindaweirdthatonestrangerwemetatthepartyjustjumpedintoourgroup
1.16
露露风
hesaysthiswouldsavelives.studiesshowthatmanypeopledonotwanttoperformmouth-to-mouthbreathingonastrangerforfearofgettingadiseaseCardiacarrestkillsmorethan300000peopleintheunitedstateseveryyearperformcar
【日更挑战】2022-12-03比赛日NOTES
扁圆柱体
日更挑战当前排名:第595天,第707名,排名较昨日后退1名。比赛日,官网给出每场比赛的Notes(极个别场次没有),翻译如下Senators(3)-ovs.Rangers(2)Tkachuk成为2018届新秀中第2位打入100球的球员,另一位是飓风的AndreiSvechnikov(103球)。Svechnikov是2号秀,Tkachuk是4号秀;Smith说Hamonic(咽喉)和Zub(面部
Seurat - 聚类教程 (1)
冷冻工厂
程序人生
设置Seurat对象在本教程[1]中,我们将分析10XGenomics免费提供的外周血单核细胞(PBMC)数据集。在IlluminaNextSeq500上对2,700个单细胞进行了测序。可以在此处[2]找到原始数据。我们首先读取数据。Read10X()函数从10X读取cellranger管道的输出,返回唯一的分子识别(UMI)计数矩阵。该矩阵中的值表示在每个细胞(列)中检测到的每个特征(即基因;行
pod chart后报错
吃了个瓜
错误提示:Type'ChartDataSet'doesnotconformtoprotocol'RangeReplaceableCollection'解决方案//MARK:RangeReplaceableCollectionextensionChartDataSet:RangeReplaceableCollection中粘贴方法publicfuncreplaceSubrange(_subrange
【日更挑战】2021-12-11比赛日NOTES
扁圆柱体
日更挑战当前排名:第253天,第1522名,较昨日前进8名。比赛日,官网给出每场比赛的Notes(极个别场次没有),翻译如下Rangers(2)vs.Sabres(1)Fox在151场比赛中收获100个助攻,队史上和BrianLeetch并列达到该里程碑第二快(SergeiZubov,127场)。Penguins(4)vs.Capitals(2)首都人后卫MartinFehervary由于上肢伤病
周末快乐出行
成长兔英语
家有大宝贝,周末出去玩的时候可以说的注意安全类的口语~Lookoutforcars!注意车辆![闭嘴]Don'ttalktostrangers.不和陌生人说话。Watchwhereyourgoing.不要乱跑。️Payattentionsweetie.要注意点,宝贝。[发抖]StaywhereIcanseeyou.呆在我看见你的地方。[勾引]Comebacksoon!早点回来!
开源大数据集群部署(十)Ranger usersync部署
云掣YUNCHE
开源大数据集群部署 大数据
强大的销售团队背后 竟然是大数据分析的身影
蓝儿唯美
数据分析
Mark Roberge是HubSpot的首席财务官,在招聘销售职位时使用了大量数据分析。但是科技并没有挤走直觉。
大家都知道数理学家实际上已经渗透到了各行各业。这些热衷数据的人们通过处理数据理解商业流程的各个方面,以重组弱点,增强优势。
Mark Roberge是美国HubSpot公司的首席财务官,HubSpot公司在构架集客营销现象方面出过一份力——因此他也是一位数理学家。他使用数据分析
Haproxy+Keepalived高可用双机单活
bylijinnan
负载均衡 keepalived haproxy 高可用
我们的应用MyApp不支持集群,但要求双机单活(两台机器:master和slave):
1.正常情况下,只有master启动MyApp并提供服务
2.当master发生故障时,slave自动启动本机的MyApp,同时虚拟IP漂移至slave,保持对外提供服务的IP和端口不变
F5据说也能满足上面的需求,但F5的通常用法都是双机双活,单活的话还没研究过
服务器资源
10.7
eclipse编辑器中文乱码问题解决
0624chenhong
eclipse乱码
使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题。在Eclipse可以从几个层面设置编码格式:Workspace、Project、Content Type、File
本文以Eclipse 3.3(英文)为例加以说明:
1. 设置Workspace的编码格式:
Windows-&g
基础篇--resources资源
不懂事的小屁孩
android
最近一直在做java开发,偶尔敲点android代码,突然发现有些基础给忘记了,今天用半天时间温顾一下resources的资源。
String.xml 字符串资源 涉及国际化问题
http://www.2cto.com/kf/201302/190394.html
string-array
接上篇补上window平台自动上传证书文件的批处理问卷
酷的飞上天空
window
@echo off
: host=服务器证书域名或ip,需要和部署时服务器的域名或ip一致 ou=公司名称, o=公司名称
set host=localhost
set ou=localhost
set o=localhost
set password=123456
set validity=3650
set salias=s
企业物联网大潮涌动:如何做好准备?
蓝儿唯美
企业
物联网的可能性也许是无限的。要找出架构师可以做好准备的领域然后利用日益连接的世界。
尽管物联网(IoT)还很新,企业架构师现在也应该为一个连接更加紧密的未来做好计划,而不是跟上闸门被打开后的集成挑战。“问题不在于物联网正在进入哪些领域,而是哪些地方物联网没有在企业推进,” Gartner研究总监Mike Walker说。
Gartner预测到2020年物联网设备安装量将达260亿,这些设备在全
spring学习——数据库(mybatis持久化框架配置)
a-john
mybatis
Spring提供了一组数据访问框架,集成了多种数据访问技术。无论是JDBC,iBATIS(mybatis)还是Hibernate,Spring都能够帮助消除持久化代码中单调枯燥的数据访问逻辑。可以依赖Spring来处理底层的数据访问。
mybatis是一种Spring持久化框架,要使用mybatis,就要做好相应的配置:
1,配置数据源。有很多数据源可以选择,如:DBCP,JDBC,aliba
Java静态代理、动态代理实例
aijuans
Java静态代理
采用Java代理模式,代理类通过调用委托类对象的方法,来提供特定的服务。委托类需要实现一个业务接口,代理类返回委托类的实例接口对象。
按照代理类的创建时期,可以分为:静态代理和动态代理。
所谓静态代理: 指程序员创建好代理类,编译时直接生成代理类的字节码文件。
所谓动态代理: 在程序运行时,通过反射机制动态生成代理类。
一、静态代理类实例:
1、Serivce.ja
Struts1与Struts2的12点区别
asia007
Struts1与Struts2
1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的P
初学者要多看看帮助文档 不要用js来写Jquery的代码
百合不是茶
jquery js
解析json数据的时候需要将解析的数据写到文本框中, 出现了用js来写Jquery代码的问题;
1, JQuery的赋值 有问题
代码如下: data.username 表示的是: 网易
$("#use
经理怎么和员工搞好关系和信任
bijian1013
团队 项目管理 管理
产品经理应该有坚实的专业基础,这里的基础包括产品方向和产品策略的把握,包括设计,也包括对技术的理解和见识,对运营和市场的敏感,以及良好的沟通和协作能力。换言之,既然是产品经理,整个产品的方方面面都应该能摸得出门道。这也不懂那也不懂,如何让人信服?如何让自己懂?就是不断学习,不仅仅从书本中,更从平时和各种角色的沟通
如何为rich:tree不同类型节点设置右键菜单
sunjing
contextMenu tree Richfaces
组合使用target和targetSelector就可以啦,如下: <rich:tree id="ruleTree" value="#{treeAction.ruleTree}" var="node" nodeType="#{node.type}"
selectionChangeListener=&qu
【Redis二】Redis2.8.17搭建主从复制环境
bit1129
redis
开始使用Redis2.8.17
Redis第一篇在Redis2.4.5上搭建主从复制环境,对它的主从复制的工作机制,真正的惊呆了。不知道Redis2.8.17的主从复制机制是怎样的,Redis到了2.4.5这个版本,主从复制还做成那样,Impossible is nothing! 本篇把主从复制环境再搭一遍看看效果,这次在Unbuntu上用官方支持的版本。 Ubuntu上安装Red
JSONObject转换JSON--将Date转换为指定格式
白糖_
JSONObject
项目中,经常会用JSONObject插件将JavaBean或List<JavaBean>转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式:
{"nanos":0,"time":-27076233600000,
JavaScript语言精粹读书笔记
braveCS
JavaScript
【经典用法】:
//①定义新方法
Function .prototype.method=function(name, func){
this.prototype[name]=func;
return this;
}
//②给Object增加一个create方法,这个方法创建一个使用原对
编程之美-找符合条件的整数 用字符串来表示大整数避免溢出
bylijinnan
编程之美
import java.util.LinkedList;
public class FindInteger {
/**
* 编程之美 找符合条件的整数 用字符串来表示大整数避免溢出
* 题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0
*
* 假设当前正在搜索由0,1组成的K位十进制数
读书笔记
chengxuyuancsdn
读书笔记
1、Struts访问资源
2、把静态参数传递给一个动作
3、<result>type属性
4、s:iterator、s:if c:forEach
5、StringBuilder和StringBuffer
6、spring配置拦截器
1、访问资源
(1)通过ServletActionContext对象和实现ServletContextAware,ServletReque
[通讯与电力]光网城市建设的一些问题
comsci
问题
信号防护的问题,前面已经说过了,这里要说光网交换机与市电保障的关系
我们过去用的ADSL线路,因为是电话线,在小区和街道电力中断的情况下,只要在家里用笔记本电脑+蓄电池,连接ADSL,同样可以上网........
 
oracle 空间RESUMABLE
daizj
oracle 空间不足 RESUMABLE 错误挂起
空间RESUMABLE操作 转
Oracle从9i开始引入这个功能,当出现空间不足等相关的错误时,Oracle可以不是马上返回错误信息,并回滚当前的操作,而是将操作挂起,直到挂起时间超过RESUMABLE TIMEOUT,或者空间不足的错误被解决。
这一篇简单介绍空间RESUMABLE的例子。
第一次碰到这个特性是在一次安装9i数据库的过程中,在利用D
重构第一次写的线程池
dieslrae
线程池 python
最近没有什么学习欲望,修改之前的线程池的计划一直搁置,这几天比较闲,还是做了一次重构,由之前的2个类拆分为现在的4个类.
1、首先是工作线程类:TaskThread,此类为一个工作线程,用于完成一个工作任务,提供等待(wait),继续(proceed),绑定任务(bindTask)等方法
#!/usr/bin/env python
# -*- coding:utf8 -*-
C语言学习六指针
dcj3sjt126com
c
初识指针,简单示例程序:
/*
指针就是地址,地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
*/
# include <stdio.h>
int main(void)
{
int * p; // p是变量的名字, int *
yii2 beforeSave afterSave beforeDelete
dcj3sjt126com
delete
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
if($insert) {
//这里是新增数据
} else {
//这里是更新数据
}
}
 
timertask
shuizhaosi888
timertask
java.util.Timer timer = new java.util.Timer(true);
// true 说明这个timer以daemon方式运行(优先级低,
// 程序结束timer也自动结束),注意,javax.swing
// 包中也有一个Timer类,如果import中用到swing包,
// 要注意名字的冲突。
TimerTask task = new
Spring Security(13)——session管理
234390216
session Spring Security 攻击保护 超时
session管理
目录
1.1 检测session超时
1.2 concurrency-control
1.3 session 固定攻击保护
 
公司项目NODEJS实践0.3[ mongo / session ...]
逐行分析JS源代码
mongodb session nodejs
http://www.upopen.cn
一、前言
书接上回,我们搭建了WEB服务端路由、模板等功能,完成了register 通过ajax与后端的通信,今天主要完成数据与mongodb的存取,实现注册 / 登录 /
pojo.vo.po.domain区别
LiaoJuncai
java VO POJO javabean domain
POJO = "Plain Old Java Object",是MartinFowler等发明的一个术语,用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO不但当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB, JDBC等等。
即POJO是一个简单的普通的Java对象,它包含业务逻辑
Windows Error Code
OhMyCC
windows
0 操作成功完成.
1 功能错误.
2 系统找不到指定的文件.
3 系统找不到指定的路径.
4 系统无法打开文件.
5 拒绝访问.
6 句柄无效.
7 存储控制块被损坏.
8 存储空间不足, 无法处理此命令.
9 存储控制块地址无效.
10 环境错误.
11 试图加载格式错误的程序.
12 访问码无效.
13 数据无效.
14 存储器不足, 无法完成此操作.
15 系
在storm集群环境下发布Topology
roadrunners
集群 storm topology spout bolt
storm的topology设计和开发就略过了。本章主要来说说如何在storm的集群环境中,通过storm的管理命令来发布和管理集群中的topology。
1、打包
打包插件是使用maven提供的maven-shade-plugin,详细见maven-shade-plugin。
<plugin>
<groupId>org.apache.maven.
为什么不允许代码里出现“魔数”
tomcat_oracle
java
在一个新项目中,我最先做的事情之一,就是建立使用诸如Checkstyle和Findbugs之类工具的准则。目的是制定一些代码规范,以及避免通过静态代码分析就能够检测到的bug。 迟早会有人给出案例说这样太离谱了。其中的一个案例是Checkstyle的魔数检查。它会对任何没有定义常量就使用的数字字面量给出警告,除了-1、0、1和2。 很多开发者在这个检查方面都有问题,这可以从结果
zoj 3511 Cake Robbery(线段树)
阿尔萨斯
线段树
题目链接:zoj 3511 Cake Robbery
题目大意:就是有一个N边形的蛋糕,切M刀,从中挑选一块边数最多的,保证没有两条边重叠。
解题思路:有多少个顶点即为有多少条边,所以直接按照切刀切掉点的个数排序,然后用线段树维护剩下的还有哪些点。
#include <cstdio>
#include <cstring>
#include <vector&