(SM-2202) Azure SQL
Table of Contents:
Storage management supports SQL Database in Azure. Storage Management automatically creates Azure SQL tables and can load them with data when used in combination with Azure BLOB. It can also be used to query data back to SAP.
General Prerequisites
SAP NetWeaver release
Storage management requires SAP ABAP stack NW 7.01 SP15 or higher.
Open Ports
To enable communication between SAP systems and Azure, an outbound communication from the SAP system to the following ports on the Azure side needs to be allowed:
Port | Protocol | Target |
---|---|---|
1433 | tcp | Database host FQDN (e.g. azuresql01.database.windows.net) |
80/443 | http/https | Azure BLOB endpoint (e.g. azureblob01.blob.core.windows.net) |
Storage Management allows encrypted communication through the public internet with Azure services, but for production deployment, it is recommended to have some kind of secure connectivity in place (VPN, Private Link, Private endpoints).
Java connector
Java connector is a critical middle-ware component used for communication between SAP and Azure SQL. Please follow the installation steps described in the Java Connector Setup.
Minimum required Java connector version is 222.
and library version supporting msal4j library (optional for OAuth 2.0 Authentication)
Azure BLOB storage
Azure BLOB storage is required as intermediate storage during data transfer. Please follow this guide to create the storage Azure BLOB.
Master Key
To allow BULK INSERT into database tables from the BLOB container, Azure SQL needs to store Database Scoped Credentials.
SAS token used for authentication to BLOB container is used for creation or update of these credentials, but to store this sensitive information securely, Azure SQL requires the use of Master Key.
This can be simply created by executing query:
CREATE MASTER KEY; |
Specific password can be chosen during Master Key creation.
More information in the official Microsoft documentation CREATE MASTER KEY (Transact-SQL) - SQL Server.
Connection information
To get connectivity details for your Azure SQL database, in the Azure portal managing interface select Overview and navigate to Show database connection strings:
Note the highlighted sqlserver hostname and database name.
Create Schema
It is recommended to create a separate schema for every SAP system connected to the database.
This action is not mandatory, as the default DBO schema can be used if there will be a 1:1 relation between the SAP system and the whole Azure SQL DB.
Create DB user
There are two authentication options:
a) OAuth 2.0 authentication
To use OAuth authentication, there needs to be an application registration resulting in Tenant ID, Client ID, and Secret strings. OAuth profile setup is documented in OAuth 2.0 Authentication.
Afterward, registered application Display Name can be added as DB user:
CREATE USER [app-glue-connector] FROM EXTERNAL PROVIDER; // app-glue-connector is an example Azure AD app. registration
EXEC sp_addrolemember 'db_owner', 'app-glue-connector'; |
To enable OAuth 2.0 authentication from the SAP side, an OAuth RFC destination needs to be created.
b) Database user authentication
The other option is to use authentication using standard database user. You can use the built-in admin created during pool creation, or a dedicated technical user created later on.
// switch to Master database if not using single database
CREATE LOGIN "app-glue-connector" WITH PASSWORD = 'FovAy>pCYW%%WX'; // create your technical user and password
//switch to the working database
CREATE USER "app-glue-connector" FOR LOGIN "app-glue-connector";
EXEC sp_addrolemember 'db_owner', 'app-glue-connector'; |
Download JDBC driver for SQL server
Download JDBC driver from MS JDBC Download site. Upload the .jar file to the sub-directory under /sapmnt
filesystem, so it's available to each application server.
The default directory for the driver is /sapmnt/<SID>/global/security/dvd_conn/mssql/
, but it can be changed freely, as long as every application server will have access to it via same SAP logical path/file.
The default SAP logical file (of type DIR) used to address directory with JDBC driver is /DVD/DEF_MSSQL_DRIVER
.
|
Create Azure SQL storage in Storage Management
You can choose between 2 authentication methods: database user/password, oAuth2.0 credentials. For production environments, it’s recommended to use oAuth.
Go to transaction /DVD/SM_SETUP
Create new storage of type AZURE_SQL
a) oAuth 2.0 Authentication
Storage ID | Logical identifier of the storage (maximum 10 characters) |
Referenced storage | Azure BLOB storage ID serving as staging directory during data transfer |
Java connector RFC | RFC destination for communication with Java connector |
Java call repeat | Number of times failed JDBC calls are repeated |
Repeat delay (seconds) | Delay between repeated JDBC calls |
Dedicated SQL endpoint | Database server name as specified in JDBC connection details |
JDBC Port | Port for JDBC connection, 1433 is currently fixed port number |
Database name | Database name as specified in JDBC connection details |
Database schema | Database schema to be used (default is DBO) |
Enable update | Not in use (for future implementation) |
Use extended escaping | Encapsulates data contents in special characters to avoid possible problems during BULK INSERT to Azure SQL table |
Driver path | SAP Logical path defined via transaction FILE. Consists of concatenation of Logical File Path and Logical File Name. Example: |
Login timeout (seconds) | Time interval in seconds during which the JDBC driver is trying to establish a connection |
Fetch Size | Default size of fetch rows from the server using by JDBC driver (e.g. 500) |
Hints | Additional parameters added to JDBC connection string |
Connection pool size | Size of connection pool used by connection pooling in JCo |
OAuth 2.0 profile | Profile for OAuth 2.0 setup |
b) JDBC user/password authentication
All configuration is identical as in a), only the Authentication part is switched to Use JDBC User/Password, and actual credentials are filled in.
Password can be typed in and converted to a hash string to avoid direct visibility.