Contents

Introduction

Prerequisites

Requirements

Components Used

背景信息

Configure

Network Diagram

配置

1. 配置在Ubuntu的MySQL ：

2. 配置数据库和表：

3. 配置存储过程

4. 集成ISE与MySQL ：

5. 配置认证和授权策略：

Verify

Troubleshoot

在ISE的调试

相关信息

Introduction

本文描述如何用MySQL开放数据库连接(ODBC)外部源配置思科身份服务引擎(ISE) 2.2集成的。本文为使用MySQL作为外部身份来源ISE认证和授权的设置是有效的。

Prerequisites

Requirements

Cisco 建议您了解以下主题：

- 身份服务引擎(ISE)配置

- 基本的MySQL配置

Components Used

信息本文根据这些软件和硬件版本：

- Cisco ISE版本2.2

- 与安装的MySQL的Ubuntu Linux

- Cisco无线LAN控制器(WLC)版本8.0.100.0

- 微软视窗版本7x64

The information in this document was created from the devices in a specific lab environment.All of the devices used in this document started with a cleared (default) configuration.If your network is live, make sure that you understand the potential impact of any command.

背景信息

ISE 2.2支持多个ODBC外部源，他们中的一个是MySQL。您能使用ODBC作为外部身份来源验证用户和终端类似于激活目录(AD)。ODBC身份来源可以用于身份存储顺序和客户和赞助商认证。

是支持这ISE列表数据库引擎2.2 ：

- MySQL

- Oracle

- PostgreSQL

- Microsoft SQL Server

- Sybase

可以找到更多信息这里：https://www.cisco.com/c/en/us/td/docs/security/ise/2-2/admin_guide/b_ise_admin_guide_22/b_ise_admin_guide_22_chapter_01101.html#concept_6EB9B4875CBB47D79168E329696E2C65

Configure

Network Diagram

在此配置示例中，终端使用一个无线适配器为了与无线网络产生关联。配置在WLC的无线局域网(WLAN)为了通过ISE验证用户。在ISE， MySQL被配置作为外部身份存储。此镜像说明使用的网络拓扑：

配置

被呈现的MySQL配置是示例。请勿对待是作为Cisco推荐。

1. 配置在Ubuntu的MySQL ：

更新您的系统：

sudo apt-get update

sudo apt-get upgrade

安装MySQL (应该提示对于root用户的一个密码在安装时) ：

sudo apt-get install mysql-server

访问MySQL数据库：

mysql -u root -p

2. 配置数据库和表：

创建数据库：

mysql>

mysql> CREATE DATABASE demo_db;

Query OK, 1 row affected (0.00 sec)

mysql>

mysql> use demo_db;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

创建数据库用户并且授予他权限：

mysql>

mysql> CREATE USER 'cisco' IDENTIFIED BY 'cisco';

mysql> GRANT USAGE ON *.* TO 'cisco'@'%';

mysql> GRANT ALL PRIVILEGES ON `demo_db`.* TO 'cisco'@'%';

mysql> GRANT SELECT ON *.* TO 'cisco'@'%';

创建用户表：

mysql>

mysql> CREATE TABLE ´users´ (

-> `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

-> `username` varchar(50) NOT NULL,

-> `password` varchar(50) NOT NULL,

-> PRIMARY KEY (`user_id`),

-> UNIQUE KEY `username_UNIQUE` (`username`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.01 sec)

创建用户并且添加他们到表：

mysql>

mysql> INSERT INTO users

-> (user_id, username, password)

-> VALUES

-> (1, "alice", "Krakow123");

Query OK, 1 row affected (0.00 sec)

您能类似添加其他用户和列出表的内容(和一样用户，添加MAB认证的MAC地址-密码的方式能坚持空白) ：

mysql>

mysql> select * from users;

+---------+----------+-----------+

| user_id | username | password  |

+---------+----------+-----------+

| 1       | alice    | Krakow123 |

| 2       | bob      | Krakow123 |

| 3       | oscar    | Krakow123 |

+---------+----------+-----------+

创建组表：

mysql>

mysql> CREATE TABLE `groups` (

-> `group_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

-> `groupname` varchar(50) NOT NULL,

-> PRIMARY KEY (`group_id`),

-> UNIQUE KEY `groupname_UNIQUE` (`groupname`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.01 sec)

创建组并且添加他们到表：

mysql>

mysql> INSERT INTO groups

-> (group_id, groupname)

-> VALUES

-> (1, "everyone");

Query OK, 1 row affected (0.00 sec)

您能类似添加其他组和列出表的内容：

mysql>

mysql> select * from groups;

+----------+------------+

| group_id | groupname  |

+----------+------------+

| 3        | contractor |

| 2        | employee   |

| 1        | everyone   |

+----------+------------+

创建映射的表用户和组之间

mysql>

mysql> CREATE TABLE `user_group` (

-> `user_id` int(10) unsigned NOT NULL,

-> `group_id` int(10) unsigned NOT NULL,

-> PRIMARY KEY (`user_id`,`group_id`),

-> KEY `group_id` (`group_id`),

-> CONSTRAINT `user_group_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)

-> ON DELETE CASCADE,

-> CONSTRAINT `user_group_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `groups`

-> (`group_id`) ON DELETE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.01 sec)

填装映射的表用户和组之间

mysql>

mysql> INSERT INTO user_group

-> (user_id, group_id)

-> VALUES

-> (1, 1);

Query OK, 1 row affected (0.00 sec)

您能类似添加其他映射和列出表的内容：

mysql>

mysql> select * from user_group;

+---------+----------+

| user_id | group_id |

+---------+----------+

| 1       | 1        |

| 2       | 1        |

| 1       | 2        |

| 2       | 3        |

+---------+----------+

4 rows in set (0.00 sec)

3. 配置存储过程

您必须配置必需的存储过程利用ODBC身份来源验证用户。由程序执行的任务根据认证协议变化。 ISE支持三种不同的证件类型检查ODBC外存储。您需要配置检查的每种类型的分开的存储过程。 ISE呼叫与输入参数的适当的存储过程并且收到输出。数据库能返回recordset或一套已命名参数以回应ODBC查询。

- 纯文本在ODBC数据库的密码验证- PAP和PEAP的认证在数据库内出现。如果程序查找匹配输入的一个用户名/密码组合，用户成功验证。

- 拿来从ODBC数据库的纯文本密码- CHAP、MS-CHAPv1/v2、EAP-MD5、LEAP和EAP-MSCHAPv2的认证(作为PEAP或EAP-FAST内在方法)在Cisco ISE内出现(ISE检查用户提供的密码并且它与从存储过程接收的密码比较)。如果用户名是正确的，存储过程返回密码。如果没找到用户名，返回错误代码。

- 查找- MAB的认证在数据库内出现。如果找到所需的用户名，相关参数返回到ISE。

应该用MySQL的分隔符定义那些程序中的每一个能接受查询的语法：

DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `ISEGroups`(username varchar(64), OUT result INT)

begin

CASE username

WHEN '*' THEN

select distinct groupname from groups;

ELSE

select groupname from user_group

inner join users ON users.user_id = user_group.user_id

inner join groups ON groups.group_id = user_group.group_id

where users.username = username;

END CASE;

SET result = 0;

end //

DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `ISEAuthUserPlainReturnsRecordset`(username varchar(64), password varchar(255))

begin

IF EXISTS (select * from users where users.username = username and users.password = password ) THEN

select 0,11,'This is a very good user, give him all access','no error';

ELSE

select 3, 0, 'odbc','ODBC Authen Error';

END IF;

end //

DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `ISEFetchPasswordReturnsRecordset`(username varchar(64))

begin

IF EXISTS (select * from users where users.username = username) THEN

select 0,11,'This is a very good user, give him all access','no error',password from users where users.username = username;

ELSE

select 3, 0, 'odbc','ODBC Authen Error';

END IF;

end //

DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `ISEUserLookupReturnsRecordset`(username varchar(64))

begin

IF EXISTS (select * from users where users.username = username) THEN

select 0,11,'This is a very good user, give him all access','no error';

ELSE

select 3, 0, 'odbc','ODBC Authen Error';

END IF;

end //

4. 集成ISE与MySQL ：

请使用如下所述的信息为了集成MySQL与Cisco ISE。连接对Administration >身份管理>外部身份来源> ODBC并且添加新的存储：

请使用运行MySQL数据库作为主机名-/下面IP地址Ubuntu的IP地址。指定及早被创建数据库(在这种情况下使用MySQL)，也插入数据库名称和数据库用户凭证的类型：

指定在MySQL被创建–您需要小心对MAC地址格式程序的名字(在本例中更改了到另外格式) ：

一旦完成，请回到Connection选项和测试连接：

拿来从MySQL的属性，点击Attributes选项：

拿来组同一个方式：

5. 配置认证和授权策略：

配置ISE验证和认证从MySQL数据库的用户。连接对策略>认证和策略>授权：

Verify

两认证流测试了：PEAP-MSCHAPv2和MAB。阿丽斯是雇员组的一部分在MySQL的，鲍伯是承包小组的一部分：

Troubleshoot

在ISE的调试

为了在ISE的关闭调试，连接对管理>System >记录>调试日志配置，挑选PSN节点并且改变odbc id存储组件的日志标准调试：

将被检查的日志- prrt-server.log和prrt-management.log。您能直接地从ISE CLI盯梢他们：

vchrenek-ise22-1/admin# show logging应用程序prrt-management.log尾标

在用户突然移动的认证时， ISE必须拿来纯文本密码和在存储过程后是使用的ISEFetchPasswordReturnsRecordset ：

2017-02-18 14:13:37,565 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Fetch Plain Text Password. Username=bob, SessionID=0a3e94660000090658a8487f

2017-02-18 14:13:37,566 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24861

2017-02-18 14:13:37,567 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2017-02-18 14:13:37,567 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetch plain text password

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEFetchPasswordReturnsRecordset

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Using recordset to obtain stored procedure result values

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24855

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEFetchPasswordReturnsRecordset(?)}

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=bob

2017-02-18 14:13:37,568 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2017-02-18 14:13:37,571 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2017-02-18 14:13:37,571 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Obtain stored procedure results from recordset

2017-02-18 14:13:37,571 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received result recordset, number of columns=5

2017-02-18 14:13:37,571 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Results successfully parsed from recordset

2017-02-18 14:13:37,572 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2017-02-18 14:13:37,572 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2017-02-18 14:13:37,572 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2017-02-18 14:13:37,572 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.OdbcAuthResult -:::- Authentication result: code=0, Conection succeeded=false, odbcDbErrorString=no error, odbcStoredProcedureCustomerErrorString=null, accountInfo=This is a very good user, give him all access, group=11

因为ISE必须检查ODBC组分配，必须检索组：

2017-02-18 14:13:37,572 DEBUG  [Thread-493][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24862

2017-02-18 14:13:37,728 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Username=bob, SessionID=0a3e94660000090658a8487f

2017-02-18 14:13:37,728 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Fetch user groups. Username=bob, SessionID=0a3e94660000090658a8487f

2017-02-18 14:13:37,728 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24869

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetch user groups

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEGroups

2017-02-18 14:13:37,729 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEGroups(?,?)}

2017-02-18 14:13:37,733 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=bob

2017-02-18 14:13:37,733 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received result recordset, total number of columns=1

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- According to column number expect multiple rows (vertical attributes/groups retured result)

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: ExternalGroup=everyone

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: ExternalGroup=contractor

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Results successfully parsed from recordset

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Result code indicates success

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2017-02-18 14:13:37,740 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24870

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Got groups...

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Got groups(0) = everyone

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Setting Internal groups(0) = everyone

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Got groups(1) = contractor

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Setting Internal groups(1) = contractor

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Username=bob, ExternalGroups=[everyone, contractor]

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Fetch user attributes. Username=bob, SessionID=0a3e94660000090658a8487f

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24872

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

同样申请属性：

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetch user attributes

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEAttrsH

2017-02-18 14:13:37,741 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEAttrsH(?,?)}

2017-02-18 14:13:37,745 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=bob

2017-02-18 14:13:37,746 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received result recordset, total number of columns=3

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- According to column number expect multiple columns (hotizontal attributes/groups retured result)

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: eye_color=green

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: floor=1

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: is_certified=true

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Results successfully parsed from recordset

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Result code indicates success

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2017-02-18 14:13:37,749 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24873

2017-02-18 14:13:37,750 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user attrs. Username=bob, Setting myODBC.eye_color to green

2017-02-18 14:13:37,750 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user attrs. Username=bob, Setting myODBC.floor to 1

2017-02-18 14:13:37,750 DEBUG  [Thread-259][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user attrs. Username=bob, Setting myODBC.is_certified to true

相关信息

- Technical Support & Documentation - Cisco Systems

- ISE 2.2版本注释

- ISE 2.2硬件安装指南

- ISE 2.2升级指南

- ISE 2.2引擎管理员指南