Versions 2.1.12 - 4.8
With the LDAP authentication mechanism, users (and passwords) and roles (or groups) are loaded from an Active Directory or LDAP domain.
Encrypting Credentials in the Configuration
To encode credentials defined in dvserver-standalone.xml, do the following:
1. Encrypt the password using the UTILS.encrypt function:
SELECT UTILS.encrypt('password');;
2. Set encoded values for java.naming.security.credentials and bindCredential:
<module-option name="java.naming.security.credentials" value="ZjyMp28QJE0D47Rld0LOFw=="/>
<module-option name="bindCredential" value="ZjyMp28QJE0D47Rld0LOFw=="/>
3. Set dv.encrypted.credentials  to TRUE:
<module-option name="dv.encrypted.credentials" value="true"/>
Configuration
To use authentication based on LDAP, you need to configure the <authentication> section in the current dv-security security-domain defined in dvserver-standalone.xml.
Here is an example configuration:
<security-domain name="dv-security" cache-type="default">
	<authentication>
		<login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" module="com.datavirtuality.dv" flag="required">
			<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
			<module-option name="java.naming.provider.url" value="ldap://192.168.0.68/"/>
			<module-option name="java.naming.security.authentication" value="simple"/>
			<module-option name="java.naming.security.principal" value="CN=Administrator,CN=Users,DC=mydomain,DC=local"/>
			<module-option name="java.naming.security.credentials" value="Password123"/>
			<module-option name="bindDN" value="CN=Administrator,CN=Users,DC=mydomain,DC=local"/>
			<module-option name="bindCredential" value="Password123"/>
			<module-option name="baseCtxDN" value="DC=mydomain,DC=local"/>
			<module-option name="baseFilter" value="(CN={0})"/>
			<module-option name="rolesCtxDN" value="OU=dvroles,DC=mydomain,DC=local"/>
			<module-option name="roleFilter" value="(member={1})"/>
			<module-option name="roleAttributeIsDN" value="false"/>
			<module-option name="roleAttributeID" value="cn"/>
			<module-option name="roleRecursion" value="5"/>
            <module-option name="searchFilterUsers" value="(memberof=cn=DataVirtuality,OU=Users,DC=mydomain,DC=local)"/>
            <module-option name="searchFilterGroups" value="CN=DataVirtuality"/>
			<module-option name="allowEmptyPasswords" value="false"/>
			<module-option name="defaultAdminGroup" value="dv-admins"/>
			<module-option name="displayUserName" value="cn"/>
		</login-module>	
	</authentication>
</security-domain>
This code replaces the following one in dvserver-standalone.xml:
<security-domain name="dv-security" cache-type="default">
	<authentication>
		<login-module code="com.datavirtuality.dv.core.teiid.users.DVLoginModule" flag="required" module="com.datavirtuality.dv"/>
	</authentication>
</security-domain>
The parameters should be configured as follows:
To view the full table, click the expand button in its top right corner
Parameter  | Description  | 
|---|---|
  | Hostname or IP address of directory server. Can use   | 
  | User account that has permissions to read users and groups from the directory  | 
  | Credentials of the user account above  | 
  | Same as   | 
  | Same as   | 
  | The container where to start searching for roles  | 
  | When a user logs in, this filter locates the user inside the directory based on the provided username passed as   | 
  | Optional filter to restrict the groups that the login module will retrieve. By default, all groups under   | 
  | Optional filter to restrict the users that the login module will retrieve. By default, all users under   | 
  | The container where to start searching for roles  | 
  | Filter to obtain groups a user belongs to. The users'   | 
  | Set to   | 
  |  If   | 
  | The depth to search for a role in the given role context. Disabled if set to   | 
  | Set to   | 
  | Name of the Active Directory role to be granted administrative rights on the CData Virtuality Server  | 
  | Defines LDAP attribute that is used as CData Virtuality " Examples: Use <module-option name="displayUserName" value="has('userPrincipalName') ? stripDomain(userPrincipalName) : cn"/>  when "baseFilter" is set to  Use   | 
Authorization and Authentication Realms Stacking
Login modules can be combined to authenticate and authorize users, and to load users and roles. For example, you can use LDAP authentication while managing roles and permissions internally. Follow these steps:
Start the server as usual and log in with admin/admin.
Create internal user accounts matching the usernames of LDAP users. Assign them roles and permissions, but use placeholder passwords.
SQL-- Create a user with admin role CALL SYSADMIN.addUser("name" => 'ad_user1', "pwd" => '123', "role_name" => 'admin-role') ;; -- Create a user wiht connect role CALL SYSADMIN.addUser("name" => 'ad_user2', "pwd" => '123', "role_name" => 'connect-dv-role') ;;Stop the server and update the configuration as follows:
CODE<security-domain name="dv-security" cache-type="default"> <authentication> <login-module code="com.datavirtuality.dv.core.teiid.users.DVLoginModule" flag="optional" module="com.datavirtuality.dv"/> <login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" flag="required" module="com.datavirtuality.dv"> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <module-option name="java.naming.provider.url" value="ldap://192.168.0.68/"/> <module-option name="java.naming.security.authentication" value="simple"/> <module-option name="java.naming.security.principal" value="CN=Administrator,CN=Users,DC=mydomain,DC=local"/> <module-option name="java.naming.security.credentials" value="Password123"/> <module-option name="bindDN" value="CN=Administrator,CN=Users,DC=mydomain,DC=local"/> <module-option name="bindCredential" value="Password123"/> <module-option name="baseCtxDN" value="DC=mydomain,DC=local"/> <module-option name="baseFilter" value="(CN={0})"/> <module-option name="displayUserName" value="cn"/> <module-option name="allowEmptyPasswords" value="false"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="com.datavirtuality.dv.core.teiid.users.DVLoginModule" flag="required" module="com.datavirtuality.dv"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain>Restart the server.
Log in using the usernames created in step 2 to access the system.
displayUserName parameter default value behaviour has been changed in v4.2:
Previously:
If
displayUserNamewas not specified in the dvserver-standalone.xml file, the system defaulted to using the user'sdisplayNameLDAP attribute value asdisplayUserName. IfdisplayNamewas not available, thedistinguishedNameLDAP attribute value was used instead, as every LDAP user has adistinguishedName;Similarly, if
displayUserNamewas specified but some LDAP users lacked the used LDAP attribute, the system defaulted to thedistinguishedNameLDAP attribute value.
Since v4.2:
This update removes the automatic use of
distinguishedNameLDAP attribute in cases where the user does not have adisplayName, or the attribute specified indisplayUserNameis missing. Now, an error will occur when reading CData Virtuality users ifdisplayUserNameis not specified in the config, or if it is set to an attribute that some users do not have (e.g.cn). Therefore, it is crucial to specifydisplayUserNameaccurately.
Сonnecting to the Active Directory server over the TLS protocol requires the following parameter:
<module-option name="java.naming.security.protocol" value="ssl"/>