Inhalt

Einführung

Voraussetzungen

Anforderungen

Verwendete Komponenten

Konfigurieren

Schritt 1: MS SQL-Basiskonfiguration

Schritt 2: ISE - Basiskonfiguration

Schritt 3: Benutzerauthentifizierung konfigurieren

Schritt 4: Gruppenabruf konfigurieren

Schritt 5: Konfigurieren des Abrufen von Attributen

Fehlerbehebung

Einführung

In diesem Dokument wird beschrieben, wie Identity Services Engine (ISE) mit Microsoft Standard Query Language (SQL) Server für die ISE-Authentifizierung mithilfe von Open Database Connectivity (ODBC) konfiguriert wird.

Hinweis: Für die Open Database Connectivity (ODBC)-Authentifizierung muss die ISE ein Nur-Text-Benutzerkennwort abrufen können. Das Kennwort kann in der Datenbank verschlüsselt werden, muss jedoch von der gespeicherten Prozedur entschlüsselt werden.

Voraussetzungen

Anforderungen

Cisco empfiehlt, über Kenntnisse in folgenden Bereichen zu verfügen:

- Datenbank- und ODBC-Konzepte

- Microsoft SQL Server

Verwendete Komponenten

Die Informationen in diesem Dokument basieren auf den folgenden Software- und Hardwareversionen:

- Identity Services Engine 2.1

- MSSQL Server 2008 R2

Konfigurieren

Schritt 1: MS SQL-Basiskonfiguration

Zu den Konfigurationsschritten gehören das Erstellen einer Datenbank und eines Benutzers für die ISE mit Zugriffsberechtigungen auf diese Datenbank.

Hinweis: Die ISE unterstützt nur die SQL-Authentifizierung, nicht das Windows-Konto. Wenn Sie den Authentifizierungsmodus ändern müssen, finden Sie weitere Informationen unter Change Server Authentication Mode (Serverauthentifizierungsmodus ändern).

1. Öffnen Sie SQL Server Management Studio (Startmenü > Microsoft SQL Server 2008 R2), und erstellen Sie eine Datenbank:

2. Lassen Sie die Standardoptionen unverändert, oder passen Sie die Datenbankeinstellungen wie in diesem Bild gezeigt an:

3. Erstellen Sie einen Benutzer, und legen Sie die Berechtigungen wie in den folgenden Bildern gezeigt fest:

Schritt 2: ISE - Basiskonfiguration

Erstellen einer ODBC-Identitätsquelle unter Administration > External Identity Source > ODBC und Testverbindung:

Schritt 3: Benutzerauthentifizierung konfigurieren

Die ISE-Authentifizierung an ODBC verwendet gespeicherte Prozeduren.Die gespeicherte Prozedur für die Authentifizierung gibt Ergebnismenge mit dieser Syntax zurück:

Wert

Typ

Ergebnis

Ganzzahl

Gruppe (nur zur Kompatibilität mit ACS 4.2)

Integer oder varchar(255)

Kontoinformationen

varchar(255)

Fehlerstring

varchar(255)

Weitere Verfahren finden Sie im Cisco Identity Services Engine 2.1-Administrationsleitfaden.

Tipp: Sie können benannte Parameter anstelle von Resultset zurückgeben. Es ist nur ein anderer Ausgabetyp, die Funktionalität ist die gleiche.

1. Navigieren Sie zu Optionen, und deaktivieren Sie das Kontrollkästchen Speichern von Änderungen, die eine Neuerstellung der Tabelle erfordern, verhindern (optional):

2. Erstellen Sie die Tabelle. Stellen Sie sicher, dass Sie die Identitätseinstellungen für den Primärschlüssel festlegen. Um user_id als Primärschlüssel festzulegen, klicken Sie mit der rechten Maustaste auf den Spaltennamen:

Letzte SQL-Version:

CREATE TABLE [dbo].[ISE_Users](

[user_id] [int] IDENTITY(1,1) NOT NULL,

[username] [varchar](max) NOT NULL,

[password] [varchar](max) NOT NULL,

CONSTRAINT [PK_ISE_Users] PRIMARY KEY CLUSTERED

(

[user_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

3. Führen Sie diese Abfrage aus, um einen Benutzer einzufügen:

insert into ISE_Users(username,password) values('odbcuser1','odbcpass');

4. Erstellen Sie eine Prozedur für die unverschlüsselte Kennwortauthentifizierung (für PAP, EAP-GTC innere Methode, TACACS):

CREATE PROCEDURE [dbo].[ISEAuthUserPlainReturnsRecordset]

@username varchar(255), @password varchar(255)

AS

BEGIN

IF EXISTS( SELECT username

FROM ISE_Users

WHERE username = @username

AND password = @password )

SELECT 0,11,'This is a very good user, give him all access','No Error'

FROM ISE_Users

WHERE username = @username

ELSE

SELECT 3,0,'odbc','ODBC Authen Error'

END

5. Erstellen Sie eine Prozedur zum Abrufen von unverschlüsselten Kennwörtern (für CHAP, MSCHAPv1/v2, EAP-MD5, LEAP, EAP-MSCHAPv2 innere Methode, TACACS):

CREATE PROCEDURE [dbo].[ISEFetchPasswordReturnsRecordset]

@username varchar(255)

AS

BEGIN

IF EXISTS( SELECT username

FROM ISE_Users

WHERE username = @username)

SELECT 0,11,'This is a very good user, give him all access','No Error',password

FROM ISE_Users

WHERE username = @username

ELSE

SELECT 3,0,'odbc','ODBC Authen Error'

END

6. Erstellen Sie eine Prozedur zur Prüfung des Benutzernamens oder des Rechners (für MAB verwendet, schnelle Wiederverbindung von PEAP, EAP-FAST und EAP-TTLS):

CREATE PROCEDURE [dbo].[ISEUserLookupReturnsRecordset]

@username varchar(255)

AS

BEGIN

IF EXISTS( SELECT username

FROM ISE_Users

WHERE username = @username)

SELECT 0,11,'This is a very good user, give him all access','No Error'

FROM ISE_Users

WHERE username = @username

ELSE

SELECT 3,0,'odbc','ODBC Authen Error'

END

7. Testerstellte Prozeduren:

Testen Sie andere Verfahren auf die gleiche Weise.

8. Konfigurieren von Prozeduren auf der ISE und Speichern:

9. Erstellen Sie eine einfache Authentifizierungsregel mit ODBC, und testen Sie sie:

b3560#test aaa group ISE236 odbcuser1 odbcpass legacy

Attempting authentication test to server-group ISE236 using radius

User was successfully authenticated.

Schritt 4: Gruppenabruf konfigurieren

1. Erstellen Sie Tabellen mit Benutzergruppen und eine andere Tabelle für die Many-to-Many-Zuordnung:

CREATE TABLE [dbo].[Groups](

[Group_ID] [int] IDENTITY(1,1) NOT NULL,

[Group_Name] [varchar](max) NOT NULL,

[Group_Desc] [text] NOT NULL,

CONSTRAINT [PK_Groups] PRIMARY KEY CLUSTERED

(

[Group_ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMAR

CREATE TABLE [dbo].[User_Groups_Mapping](

[user_id] [int] NOT NULL,

[group_id] [int] NOT NULL

) ON [PRIMARY]

ALTER TABLE dbo.User_Groups_Mapping ADD CONSTRAINT

FK_User_Groups_Mapping_Groups FOREIGN KEY

(

group_id

) REFERENCES dbo.Groups

(

Group_ID

) ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE dbo.User_Groups_Mapping ADD CONSTRAINT

FK_User_Groups_Mapping_ISE_Users FOREIGN KEY

(

user_id

) REFERENCES dbo.ISE_Users

(

user_id

) ON UPDATE CASCADE

ON DELETE CASCADE

2. Fügen Sie Gruppen und Zuordnungen hinzu, sodass ODBCUSER1 zu beiden Gruppen gehört:

INSERT [dbo].[Groups] ([Group_ID], [Group_Name], [Group_Desc]) VALUES (1, N'ODBCGroup1', N'My Nice Group1')

INSERT [dbo].[User_Groups_Mapping] ([user_id], [group_id]) VALUES (1, 1)

INSERT [dbo].[Groups] ([Group_ID], [Group_Name], [Group_Desc]) VALUES (2, N'ODBCGroup2', N'My Nice Group2')

INSERT [dbo].[User_Groups_Mapping] ([user_id], [group_id]) VALUES (1, 2)

3. Vorgang zum Abrufen von Gruppen erstellen:

CREATE PROCEDURE [dbo].[ISEGroupsRetrieval]

@username varchar(255), @result int output

AS

BEGIN

if exists (select * from ISE_Users where username = @username)

begin

set @result = 0

select Group_Name from Groups where group_id in (select group_ID from User_Groups_Mapping where User_Groups_Mapping.USER_ID IN (select USER_ID from ISE_Users where username=@username ) )

end

else

set @result = 1

END

4. Zuordnen zu Fetch-Gruppen:

5. Abrufen der Gruppen und Hinzufügen dieser Gruppen zur ODBC-Identitätsquelle:

6. Fügen Sie einen anderen Benutzer hinzu, der keiner Gruppe angehört:

insert into ISE_Users(username,password) values('odbcuser2','odbcpass');

7. Erstellen eines spezifischen Policy Set und Tests:

b3560#test aaa group ISE236 odbcuser2 odbcpass legacy

Attempting authentication test to server-group ISE236 using radius

User authentication request was rejected by server.

b3560#test aaa group ISE236 odbcuser1 odbcpass legacy

Attempting authentication test to server-group ISE236 using radius

User was successfully authenticated.

Schritt 5: Konfigurieren des Abrufen von Attributen

1. Um dieses Beispiel zu vereinfachen, wird eine flache Tabelle für Attribute verwendet:

CREATE TABLE [dbo].[User_Attributes](

[user_id] [int] NOT NULL,

[Attribute_Name] [varchar](max) NOT NULL,

[Attribute_Value] [varchar](max) NOT NULL

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[User_Attributes] WITH CHECK ADD CONSTRAINT [FK_User_Attributes_ISE_Users] FOREIGN KEY([user_id])

REFERENCES [dbo].[ISE_Users] ([user_id])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

2. Erstellen Sie ein Attribut für einen der Benutzer:

INSERT [dbo].[User_Attributes] ([user_id], [Attribute_Name], [Attribute_Value]) VALUES (2, N'AwsomenessLevel', N'100')

INSERT [dbo].[User_Attributes] ([user_id], [Attribute_Name], [Attribute_Value]) VALUES (2, N'UserType', N'admin')

3. Erstellen einer gespeicherten Prozedur:

CREATE PROCEDURE [dbo].[ISEAttrsRetrieval]

@username varchar(255), @result int output

AS

BEGIN

if exists (select * from ISE_Users where username = @username)

begin

set @result = 0

select attribute_name , attribute_value from user_attributes where USER_ID in(SELECT USER_ID from ISE_Users where username = @username)

end

else

set @result = 1

END

4. Zuordnen zu Attributen abrufen:

5. Abrufen der Attribute:

6. Ändern Sie die ISE-Regeln:

Fehlerbehebung

Wenn die Verbindung nicht erfolgreich hergestellt werden kann, überprüfen Sie das Ereignisprotokoll von Windows. Verwenden Sie bei der ISE den Befehl show logging application prt-management.log tail beim Verbindungsversuch.

Beispiel für einen schlechten Authentifizierungsmodus:

bise236/admin# sh logg app prrt-management.log tail

2016-06-08 09:03:59,822 WARN [admin-http-pool177][] cisco.cpm.odbcidstore.impl.MSSQLServerDbAccess -:bastien::- Connection to ODBC DB failed. Exception: com.microsoft.sqlserver.jdbc.S

QLServerException: Login failed for user 'babaland\administrator'. ClientConnectionId:c74ade15-4f34-415a-9a94-4c54c58c0fc3

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'babaland\administrator'. ClientConnectionId:c74ade15-4f34-415a-9a94-4c54c58c0fc3

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)

at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)

at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)

at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)

at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)

Beispiel für Benutzer, die keine Berechtigungen zum Öffnen der Datenbank besitzen:

2016-06-08 09:13:57,842 WARN [admin-http-pool159][] cisco.cpm.odbcidstore.impl.MSSQLServerDbAccess -:bastien::- Connection to ODBC DB failed. Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "ISEDB" requested by the login. The login failed. ClientConnectionId:299c2956-6946-4282-b3ca-2aa86642a821

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "ISEDB" requested by the login. The login failed. ClientConnectionId:299c2956-6946-4282-b3ca-2aa86642a821

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)

at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)

at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)

Aktivieren Sie zur Fehlerbehebung bei DB-Vorgängen unter Administration > System > Logging > Debug Log Configuration die Option odbc-id-store auf DEBUG-Ebene.

Protokolle werden in der Datei prrt-management.log abgelegt.

Beispiel für odbuser2:

2016-06-08 12:26:56,009 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Authenticate Plain Text Password. Username=odbcuser2, SessionID=0a3027ecLA_rJLKsS5QAzuRvluGWzdYe67rIgcG3MMQcpE8yKnw

2016-06-08 12:26:56,012 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24852

2016-06-08 12:26:56,012 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2016-06-08 12:26:56,012 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Authenticate plain text password

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEAuthUserPlainReturnsRecordset

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Using recordset to obtain stored procedure result values

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24855

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEAuthUserPlainReturnsRecordset(?, ?)}

2016-06-08 12:26:56,013 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=odbcuser2, password=***

2016-06-08 12:26:56,014 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2016-06-08 12:26:56,017 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2016-06-08 12:26:56,017 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Obtain stored procedure results from recordset

2016-06-08 12:26:56,017 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received result recordset, number of columns=4

2016-06-08 12:26:56,017 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Results successfully parsed from recordset

2016-06-08 12:26:56,018 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2016-06-08 12:26:56,018 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2016-06-08 12:26:56,018 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2016-06-08 12:26:56,018 DEBUG [Thread-4051][] 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

2016-06-08 12:26:56,019 DEBUG [Thread-4051][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24853

2016-06-08 12:26:56,026 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Username=odbcuser2, SessionID=0a3027ecLA_rJLKsS5QAzuRvluGWzdYe67rIgcG3MMQcpE8yKnw

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Fetch user groups. Username=odbcuser2, SessionID=0a3027ecLA_rJLKsS5QAzuRvluGWzdYe67rIgcG3MMQcpE8yKnw

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24869

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetch user groups

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEGroupsRetrieval

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEGroupsRetrieval(?,?)}

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=odbcuser2

2016-06-08 12:26:56,029 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2016-06-08 12:26:56,031 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2016-06-08 12:26:56,032 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received epmty result set, no groups/attributes data can be obtained

2016-06-08 12:26:56,032 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Result code indicates success

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24870

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Got groups...

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user groups. Username=odbcuser2, ExternalGroups=[]

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Fetch user attributes. Username=odbcuser2, SessionID=0a3027ecLA_rJLKsS5QAzuRvluGWzdYe67rIgcG3MMQcpE8yKnw

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24872

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - get connection

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - use existing connection

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 1

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetch user attributes

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Prepare stored procedure call, procname=ISEAttrsRetrieval

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Text: {call ISEAttrsRetrieval(?,?)}

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Setup stored procedure input parameters, username=odbcuser2

2016-06-08 12:26:56,033 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Execute stored procedure call

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Process stored procedure results

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Received result recordset, total number of columns=2

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- According to column number expect multiple rows (vertical attributes/groups retured result)

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: AwsomenessLevel=100

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Fetched data: UserType=admin

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Results successfully parsed from recordset

2016-06-08 12:26:56,035 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnection -:::- Result code indicates success

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - release connection

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcConnectionPool -:::- OdbcConnectionPool - connections in use: 0

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- Call to ODBC DB succeeded

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.CustomerLog -:::- Write customer log message: 24873

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user attrs. Username=odbcuser2, Setting ISE_ODBC.AwsomenessLevel to 100

2016-06-08 12:26:56,036 DEBUG [Thread-84][] cisco.cpm.odbcidstore.impl.OdbcIdStore -:::- ODBC ID Store Operation: Get all user attrs. Username=odbcuser2, Setting ISE_ODBC.UserType to admin