InfoSphere Guardium简介
InfoSphere Guardium是来自IBM的一组数据安全性和合规性解决方案的产品系列名称。 它包括数据活动监视,漏洞评估,数据加密和文档编辑功能。
在本文中,了解传统的Guardium产品系列的增强功能,该产品系列于2009年被IBM收购,现在被称为InfoSphere Guardium数据活动监视器和InfoSphere Guardium漏洞评估解决方案。 这两种解决方案都依赖于InfoSphere Guardium服务器硬件或软件设备,如图1所示。InfoSphereGuardium功能可以从单个服务器进行配置。
图1. InfoSphere Guardium
从架构和总体拥有成本(TCO)的角度来看,InfoSphere Guardium旨在从很小的部署扩展到非常大的部署。 联合体系结构使解决方案能够扩展到监视成千上万的数据库服务器。 从TCO角度来看,InfoSphere Guardium包括:
- 调度等自动化功能。
- 功能丰富的API,公开了Guardium后端功能。
- 脚本编写。
- 用于自动化和集成目的的外部系统。
您几乎可以通过用户界面在InfoSphere Guardium中执行的所有操作都可以使用命令行界面(CLI)中的API来完成。 使用API可以轻松完成诸如查询或设置设备配置,安全策略定义,报告执行,Guardium组填充等任务。 繁琐而繁琐的任务(例如定义数千个数据源或软件TAPS(S-TAPS))可以使用Guardium API编写脚本并自动执行。 有关Guardium的API的详细信息,请参阅Guardium的技术讲座或Guardium的API引用(在相关主题 )。
从InfoSphere Guardium 9.1开始,Guardium API现在作为在线RESTful Web服务公开给外部系统。 要使用本文中描述的功能,您至少需要该版本的GPU 200,并建议使用GPU300。目标是使使用Guardium的组织能够使用现代化的界面向用户展示功能,例如Web门户或通过云。
代表性状态转移(REST)已被广泛接受,作为实现Web服务的首选体系结构样式,并且是SOAP和WSDL的更简单替代方案。 许多组织都提倡RESTful接口,以公开其服务并与其他服务接口。
用例
Guardium用户在使用新的RESTful API时可能会有创意。 以下只是一些用例的示例:
- 使数据库权限与Guardium中的组保持同步,以便快速响应人员变更。 例如,当组织采用新的DBA时,由于其特权状态,这些DBA需要加强监视。 在Guardium中执行此操作的传统方法是使用权利报告来导入数据,然后使用对该导入的信息进行查询来填充DBA组。 但是,使更新立即生效是不切实际的。 例如,如果某人被授予Oracle中的DBA角色,则可能需要一整天的时间来刷新权利报告,然后再安装该策略。
使用REST API,可以在授予DBA角色权限后将syslog事件发送给接收者,然后该接收者可以触发一些API调用来更新管理用户组并重新安装策略。 这将大大减少更新权限和提高用户日志记录级别之间的时间间隔。 或者,您可以使用Java实现自定义警报器,以直接从Guardium系统本身触发调用。
- 要求对一组用户(例如IT用户)进行不同于其他用户的跟踪。 您可以从LDAP导入用户列表来满足此要求,但是可以通过在入职应用程序期间进行REST API调用(例如在企业目录中建立钩子)来消除延迟。
- 减轻因离职人员的时间延迟而导致的风险并吊销其证书。 如果有人离开了组织,则通常可能需要很长时间才能从数据库中撤消其凭据。 InfoSphere Guardium可以立即隔离用户。 可以将REST API调用作为外部应用程序的一部分,以在预期发生此事件时对其帐户进行隔离。
重要的是要了解REST API对于在线界面非常有用,例如检索特定报表的数据,添加策略规则,管理组或定义数据源。 这不是处理大量数据的正确方法。
基础
REST Web服务使用HTTP方法(动词)GET,POST,PUT和DELETE。 他们使用JSON作为有效载荷格式,因为它比XML轻得多。
现有的Guardium API函数已映射到适当的动词和资源,因此您可以构造REST URL。 例如,Guardium的一项基本任务是管理组及其成员。 对于REST API, 组是资源,适当的REST动词取决于所需的操作。 表1显示了一个示例。
表1.将组函数映射到REST动词和资源
功能名称 | REST动词 | REST资源 |
---|---|---|
list_group_by_desc | 得到 | 组 |
创建组 | 开机自检 | 组 |
delete_group_by_desc | 删除 | 组 |
为了管理组的成员,我们将成员定义为资源,如表2所示。
表2.将成员函数映射到REST动词和资源
功能名称 | REST动词 | REST资源 |
---|---|---|
list_group_members_by_desc | 得到 | 会员 |
create_member_to_group_by_desc | 开机自检 | 会员 |
delete_member_from_group_by_desc | 删除 | 会员 |
策略也是使用InfoSphere Guardium的关键。 您可以使用策略来确定要监视的活动以及在某些情况下(例如对敏感数据的未授权访问或未知连接的访问)采取的措施。 策略可以随着条件的变化而更新,并且不同的策略可以在不同的时间生效。 表3显示了围绕策略的REST API功能的示例。 (表4实际上具有更新策略或更改策略使用的组后将用于安装策略的API。)
表3.将策略功能映射到REST动词和资源。
功能名称 | REST动词 | REST资源 |
---|---|---|
create_policy | 开机自检 | 政策 |
update_policy | 放 | 政策 |
delete_policy | 删除 | 政策 |
list_policy | 得到 | 政策 |
表4具有一些附加功能,其中资源与现有GRDAPI函数名称相同。
表4.资源与函数名称相同
功能名称 | REST动词 | REST资源 |
---|---|---|
policy_install | 开机自检 | policy_install |
patch_install | 放 | patch_install |
reset_unit_utilization_data | 放 | reset_unit_utilization_data |
stop_audit_process | 放 | stop_audit_process |
有数百种API函数。 为了您的方便,我们公开了REST API资源,以允许查询(GET)可用资源及其参数。 为此,您确实需要一个授权令牌,如“ 授权流程”中所述 。 清单1显示了查询资源的示例。
重要说明 :为了便于阅读,所有curl命令都已中断; 单行输入实际命令。
清单1.查询资源的示例
Request:
curl -k -i --header "Authorization:Bearer 80cdcfa3-e02e-4bd6-829a-6b656beaa90a"
https://10.10.9.248:8443/restAPI/restapi
Response:
[
{
"resource_id": 1,
"api_function_name": "create_datasource",
"resourceName": "datasource",
"verb": "POST"
},
{
"resource_id": 2,
"api_function_name": "list_datasource_by_id",
"resourceName": "datasource",
"verb": "GET"
},.....
输出包括GrdAPI函数名称以供参考。
清单2中指定withParameters=true
的请求返回详细描述,包括REST API函数的参数。
清单2.查询资源以包含参数详细信息withParameters=true
Request:
curl -k -i --header "Authorization: Bearer 8f8e5634-5714-4d3b-bcd8-a2f26bc768f3"
https://10.10.9.248:8443/restAPI/restapi?withParameters=true
Response:
[
{
"resource_id": 678,
"api_function_name": "list_classifier_policy",
"resourceName": "classifier_policy",
"verb": "GET",
"parameters": [
{
"parameterName": "policyName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "ruleName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "actionName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "recursive",
"parameterType": "java.lang.Boolean",
"isRequired": false
},
{
"parameterName": "api_target_host",
"parameterType": "java.lang.String",
"isRequired": false
}
]
},
{
"resource_id": 670,
"api_function_name": "update_classifier_policy",
"resourceName": "classifier_policy",
"verb": "PUT",
"parameters": [
{
"parameterName": "policyName",
"parameterType": "java.lang.String",
"isRequired": true
},
{..........
要获得特定API函数的参数列表,可以为该函数指定资源ID,如清单3所示。我们请求资源ID 678的信息,该信息与上一个清单中的API list_classifier_policy
相对应。
清单3.使用资源ID查询资源
Request:
curl -k -i --header "Authorization: Bearer 1ece8a8a-e60d-47a3-a4f4-d7703bb7c7c9"
https://10.10.9.248:8443/restAPI/restapi?resourceId=678
Response:
[
{
"parameterName": "policyName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "ruleName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "actionName",
"parameterType": "java.lang.String",
"isRequired": false
},
{
"parameterName": "recursive",
"parameterType": "java.lang.Boolean",
"isRequired": false
},
{
"parameterName": "api_target_host",
"parameterType": "java.lang.String",
"isRequired": false
}
]
授权流程
当允许外部接口连接到InfoSphere Guardium系统时,安全性是一个主要问题。 以交互方式或通过脚本使用API时,CLI或GUI框架可确保正确的身份验证。
当API作为Web服务公开时,有必要对每个请求进行身份验证和授权。 我们选择OAuth2作为授权协议,并使用已建立的Spring Security框架来实现它。 请参阅相关主题有关的OAuth2和Spring Security框架的信息。
图2显示了授权流程的概述。
图2.授权流程
以下编号步骤与图2中的编号相对应。
- Guardium管理员必须使用经过本地CLI认证的会话才能为客户端应用程序生成客户端密码。
- 将客户端机密存储在安全的地方。
- 然后,客户端应用程序将客户端秘密用于请求与有效Guardium用户关联的访问令牌。
- 客户端应用程序保存该访问令牌,该令牌的默认有效期为三小时。
- 后续的API调用必须指定令牌,并将具有授予与令牌关联的用户的权限。 令牌过期后的所有请求都将失败,并且客户端应用程序必须生成一个新令牌。
您可以使用API函数getOAuthTokenExpirationTime
和setOAuthTokenExpirationTime
来显示和修改令牌的有效期限。 此设置是全局设置,并且会影响所有令牌。 这些API函数不会作为REST API公开,只能由具有admin角色的用户通过经过身份验证的CLI会话来调用。
可以使用revokeOauthToken
API函数来撤销访问令牌。 可以使用revokeOauthClient
API函数撤销客户端ID(使所有活动令牌无效)。
注册为InfoSphere Guardium服务器的客户机应用程序
要使用REST API,应用程序必须具有适当的凭据。 InfoSphere Guardium使用OAuth流程来提供客户端机密,稍后将其用于获取适当的凭证。 使用Guardium API命令向服务器注册新应用程序时,会生成一次性的客户端密码。
注册API函数接受client_id
并返回可用于生成访问令牌的客户端密钥。 CLI用户可以在本地执行此操作,也可以通过CLI用户通过与Guardium设备的SSH会话来执行此操作。 您不能使用REST API进行注册。 必须对将由客户端应用程序访问的每个Guardium设备进行此注册。
清单4显示了调用Guardium API命令注册客户端应用程序的示例。 请注意, client_id
参数用于标识客户端,并且应该是一个有意义的名称。
清单4.调用Guardium API命令来注册客户端应用程序
v9GA.ibm.com> grdapi register_oauth_client client_id=client_id1
ID=0
{"client_id":"client_id1","client_secret":"3ac89782-ce55-4f24-b795-b6c76ecc4045",
"grant_types":"password","scope":"read,write","redirect_uri":"https://joeApp"}
ok
在上面的输出中,您可以忽略除client_secret
所有内容。
client_secret
非常重要,应适当保护 。 在该过程的下一阶段,您将需要它来请求访问令牌,以便您的应用程序可以使用REST发出grdAPI命令。
申请访问令牌
可以从具有client_secret
的系统上,从有效的Guardium用户作为REST API请求来调用访问令牌。
您可以根据自己的喜好使用各种编程语言。 对于本文中的示例,我们使用curl来调用请求。 在-d
选项之后,在http请求正文中,我们包括了OAuth请求所需的所有不同的GrdAPI参数,如下所示。
- client_id =
client_id1
,注册客户端时指定的客户端名称。 - client_secret =
3ac89782-ce55-4f24-b795-b6c76ecc4045
,即注册此客户端时获得的客户端密码。 - username =
admin
,是有效的Guardium门户网站用户,有权调用我们要调用的API函数。 - password =
<password>
,用于Guardium的密码。
清单5显示了如何请求访问令牌和响应。 (由于空间限制,添加了换行符。)
清单5.请求访问令牌
Request:
curl -k -X POST -d
'client_id=client_id1&grant_type=password&
client_secret=3ac89782-ce55-4f24-b795-b6c76ecc4045&username=admin&password=guardium'
https://10.10.9.248:8443/oauth/token
Response:
{"access_token":"80cdcfa3-e02e-4bd6-829a-6b656beaa90a",
"token_type":"bearer","expires_in":10799,"scope":"read write"}
在该示例中,Guardium设备IP地址为10.10.9.248。
现在,清单5中以粗体显示的访问令牌可用于验证其余REST API请求的真实性,直到过期为止。 如下所示,在grdAPI请求的标头中使用此access_token
非常重要。
"Authorization: Bearer 80cdcfa3-e02e-4bd6-829a-6b656beaa90a "
使用REST API
本节包含使用REST API调用Guardium函数的示例。 这些示例使用curl作为Web客户端,但是在实际环境中,外部系统将发出Web请求。
- 请求的授权令牌在标头中指定为
Authorization:Bearer
。 - 请求的操作由以下HTTP方法之一指定:
PUT
,GET
,POST
或DELETE
。 - 在URL上指定执行操作的资源。
- 在
GET
请求中,在URL上指定了其他参数。 - 在所有其他请求上,其他参数将出现在
-d
之后,并格式化为JSON表示法。
创建一个数据源( datasource
)
数据源通常在Guardium中用于为运行分类过程(有时称为敏感数据查找器),安全评估,S-TAP验证过程等指定数据库服务器。 此REST API示例使用POST操作在Guardium设备上创建数据源。 它与安全评估相关联,安全评估是InfoSphere Guardium漏洞评估产品的一部分。
如清单6所示,该命令采用诸如应用程序,数据库服务器主机,数据库名称,所有者,密码等参数。 有关参数的详细情况在InfoSphere Guardium的信息中心(请参阅相关信息 ),也可以查询restapi
如上所述资源。
清单6.创建一个数据源
Request:
curl -k --header "Authorization:Bearer 80cdcfa3-e02e-4bd6-829a-6b656beaa90a" -i -H
"Content-Type: application/json" -X POST -d
'{application:"Security Assessment",host:10.10.9.252,name:"MSSQL252",
user:admin,password:"p$ssWOrd",port:1433,shared:true,severity:MED,
type:"MS SQL SERVER (DataDirect)",user:sa}'
https://10.10.9.248:8443/restAPI/datasource
Response:
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=8C90021B43CCAF324FD72D498B0D4C93; Path=/; Secure; HttpOnly
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 36
Date: Fri, 01 Nov 2013 23:59:38 GMT
Server: SQL Guard
{"ID":20007,"Message":"ID=20007"}
该响应表明该数据源已成功添加,并且该数据源的ID为20007。此ID可用于后续命令中以操纵该数据源,因为您可以使用按对象名称(描述)或ID操纵对象的命令。 。
如果已经存在同名的数据源,则将返回错误响应,如清单7所示。
清单7.创建数据源时出错
Response:
{
"ErrorCode": 102,
"ErrorMessage": "create_datasource: ERR=102 Error creating Datasource,
a Datasource with the specified name already exists. "
}
如果错误阻止调用执行(错误或过期的访问令牌,错误的资源,错误的动词),则HTTP状态将指示错误。 如果执行请求并产生错误,例如缺少必需的参数,对象已存在,参数值错误等等,则HTTP状态为200(OK),并且错误指示将作为JSON对象显示在输出中,并带有ErrorCode
和ErrorMessage
字段。
检索数据源( list_datasource_by_id
)
为了检索刚刚创建的数据源,该示例使用ID列表(而不是描述列表)来列出上一节中创建的数据源的属性。 对于GET请求,参数位于URL上,如清单8所示。
清单8.列出数据源
Request:delete_datasource_by_id
curl -k --header "Authorization:Bearer 80cdcfa3-e02e-4bd6-829a-6b656beaa90a"
-i -H "Content-Type: application/json" -X GET
https://10.10.9.252:8443/restAPI/datasource?id=20007
Response:
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=42308503264EAEF37EC1B724DF5F3F40; Path=/; Secure; HttpOnly
X-UA-Compatible: IE=edge
X-FRAME-OPTIONS: SAMEORIGIN
Access-Control-Allow-Methods: POST, GET, PUT, DELETE
Access-Control-Allow-Headers: authorization, origin, X-Requested-With,
Content-Type, Accept
Access-Control-Max-Age: 18000
Content-Type: application/json;charset=UTF-8
Content-Length: 740
Date: Sat, 08 Mar 2014 18:38:58 GMT
Server: SQL Guard
[
{
"DatasourceId":
"https://qav9-vm01.guard.swg.usma.ibm.com:8443/restAPI/datasource?id=20000",
"DatasourceTypeId": "4",
"Name": "MSSQL252",
"Description": "null",
"Host": "10.10.9.252",
"Port": "1433",
"ServiceName": "",
"UserName": "sa",
"Password": "[B@72d272d2",
"PasswordStored": "true",
"DbName": "null",
"LastConnect": "null",
"Timestamp": "2014-03-08 13:38:51.0",
"ApplicationId": "8",
"Shared": "true",
"ConProperty": "null",
"OsUsername": "null",
"DbHomeDir": "null",
"CustomUrl": "null",
"Severity": "5",
"DbDriverId": "4",
"CompatibilityMode": "",
"DatasourceType": "MS SQL SERVER",
"ApplicationType": "SecurityAssessment"
}
]
删除数据源( delete_datasource_by_id
)
如清单9所示,该示例使用ID删除(而不是描述删除)来删除在上一节中创建的数据源。
清单9.删除数据源
Request:
curl -k --header "Authorization:Bearer 80cdcfa3-e02e-4bd6-829a-6b656beaa90a"
-i -H "Content-Type: application/json" -X DELETE -d '{id:20007}'
https://10.10.9.248:8443/restAPI/delete_datasource_by_id
Response:
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=354039539B475B50EBBFD00892A2F66A; Path=/; Secure; HttpOnly
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 36
Date: Sat, 02 Nov 2013 00:09:27 GMT
Server: SQL Guard
{"ID":20007,"Message":"ID=20007"}
消息{"ID":20007,"Message":"ID=20007"}
表示命令已成功执行。
执行报告并获取结果( online_report
)
InfoSphere Guardium具有数百个预构建的报告以及一个报告构建工具,可让您创建自定义报告。 无论哪种情况,报告都非常灵活,因为您可以在运行时指定参数以过滤报告输出并指定显示特征,例如一次在屏幕上显示多少行。
要查看报表运行时参数,请单击“ 自定义”图标,它看起来像一支蓝色铅笔。 此图标在报表portlet标题上,如图3所示。
图3.访问报告定制器
图4显示了运行时参数,这些运行时参数用于修改名为AuditTrailSample的报告以按日期缩小(现在为10天),并且仅包括DBUSER为Newuser的那些记录,无论使用哪个OSUser名称。 Fetchsize为20。
图4.报告运行时参数
图5显示了实际的定制报告。 对于有关REST API的示例,报告的内容并不重要。
图5. InfoSphere Guardium报告的示例
InfoSphere Guardium现在包括一个REST API函数,该函数模拟了称为online_report
的在线报告功能。 该示例指定报告名称(AuditTrailSample), indexFrom
规范以及报告参数规范的列表,例如QUERY_FROM_DATE
和QUERY_TO_DATE
,等等。 注意资源是online_report
。 该API函数返回一定数量的结果记录。 默认值为20,但是您可以使用可选的FetchSize
参数指定一个最大为30000的值。
您可以使用indexFrom
参数进行分页,如清单10所示。如果指定了0,则将获取报告的前20行。 如果指定了20,则将获取第20-39行,依此类推。
清单10.获取报告结果
Request:
curl -k --header "Authorization: Bearer f8839909-5dd9-4cd3-b53e-abe1d4b2d445"
-i -H "Content-Type: application/json" -X POST -d
'{"reportName":"AuditTrailSample","indexFrom":"1","reportParameter":
{"QUERY_FROM_DATE":"2012-12-01","QUERY_TO_DATE":"2013-12-04","OSUser":"%",
"DBUser":"newuser","SHOW_ALIASES":"TRUE","REMOTE_SOURCE":"%"}}'
https://10.148.54.136:8443/restAPI/online_report
Response:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=65D5D93675858A4E66A7DBDF1B3C21BB; Path=/; Secure; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 6339
Date: Thu, 02 Jan 2014 17:12:40 GMT
[
{
"Date": "2013-12-03 10:00:00.0",
"Instance Id": "7967702005115017",
"Session Id": "7967777401785489",
"Construct Id": "df2aeb4a38ed9fe51ec043badeab9548b93d3f3f",
"Total access": "5868",
"Failed Sqls": "0",
"DB2 i Current User": "",
"Timestamp": "2013-12-03 10:59:59.0",
"DB User Name": "newuser",
"OS User": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"Source Program": "PORTAL",
"Server IP": "10.10.177.111",
"Client IP": "10.10.152.179",
"Service Name": "SYB30",
"Client Host Name": "fd342cd47d2bfa4243d6670c646db6fb0d6347d8",
"Server Type": "SYBASE"
},
{
"Date": "2013-12-03 10:00:00.0",
"Instance Id": "7967702005115025",
"Session Id": "7967777401785489",
"Construct Id": "14a81f3de2e5e3693f9d9cca71e6a50a4d021b00",
"Total access": "5320",
"Failed Sqls": "0",
"DB2 i Current User": "",
"Timestamp": "2013-12-03 10:59:47.0",
"DB User Name": "newuser",
"OS User": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"Source Program": "PORTAL",
"Server IP": "10.10.177.111",
"Client IP": "10.10.152.179",
"Service Name": "SYB30",
"Client Host Name": "fd342cd47d2bfa4243d6670c646db6fb0d6347d8",
"Server Type": "SYBASE"
},
{
"Date": "2013-12-03 10:00:00.0",
"Instance Id": "7967702005115090",
"Session Id": "7967777401785489",
"Construct Id": "d621684048e1d5dada7be27db66ed5950722a3e3",
"Total access": "6437",
"Failed Sqls": "0",
"DB2 i Current User": "",
"Timestamp": "2013-12-03 10:59:59.0",
"DB User Name": "newuser",
"OS User": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"Source Program": "PORTAL",
"Server IP": "10.10.177.111",
"Client IP": "10.10.152.179",
"Service Name": "SYB30",
"Client Host Name": "fd342cd47d2bfa4243d6670c646db6fb0d6347d8",
"Server Type": "SYBASE"
},
.
如果报告结果为空,则响应类似于清单11中的结果。
清单11.报告结果为空时的响应
{
"ID": 0,
"Message": "ID=0 The Query did not retrieve any records"
}
如果indexFrom
参数指定的数字大于结果中的记录数,则响应如清单12所示。
清单12.当indexFrom
大于result中的记录时的响应
{
"ID": 0,
"Message": "ID=0 No More Records Found"
}
提示:每个报告的online_report
资源报告参数都不同。 restapi
资源仅指定一个名为reportParameter
的参数,而未指定内部参数结构。 查找所需报告参数的一种方法是查看该报告的定制器屏幕(请参见图4 )。 另一种方法是使用空的reportParameter
调用API; 响应中的错误消息指定了缺少的参数,如清单13所示。
清单13.调用带有空reportParameter
报告以发现所需的报告参数
Request:
curl -k --header "Authorization: Bearer 1ece8a8a-e60d-47a3-a4f4-d7703bb7c7c9"
-i -H "Content-Type: application/json" -X POST -d
'{"reportName":"Guardium Logins","indexFrom":"10","reportParameter":{}}'
https://10.10.9.248:8443/restAPI/online_report
Response:
{
"ErrorCode": 1001,
"ErrorMessage": "create_online_report: ERR=1001 One or more report parameters missing
- QUERY_FROM_DATE,QUERY_TO_DATE,SHOW_ALIASES,REMOTE_SOURCE,HostnameLike"
}
可以对报告结果进行排序。 如果指定了sortColumn
,则必须是报告字段之一的列标题。 sortType
必须为asc
或desc
。
如果使用了这些参数,则会对在线报告api请求的结果进行相应的排序。 例如,以下命令按组类型以升序对结果进行排序。
清单14.对报告结果进行排序
Request:
curl -k --header "Authorization:Bearer b440a718-9dea-40cb-b59a-8a7c427e25d2" -i
-H "Content-Type: application/json" -X POST -d '{"reportName":"Guardium Group
Details","indexFrom":"1","reportParameter":
{"QUERY_FROM_DATE":"2014-05-08","QUERY_TO_DATE":"2014-09-10","Group
Description":"%","Group Type":"%","SHOW_ALIASES":"TRUE","REMOTE_SOURCE":"%"}
,"fetchSize":"10000","sortColumn":"Group Type","sortType":"asc"}'
https://localhost:8443/restAPI/online_report
结论
我们希望本文引起了您对某些新REST API的兴趣,并且您正在考虑它们在您的环境和解决方案中如何有用。 我们希望听到使用这些API的任何项目,以及任何进一步增强其功能的建议。
致谢
作者要感谢Joe DiPietro和John Haldeman的有见地的评论。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1404guardrestapi/index.html