Securely store credentials and secrets.
Reference → Modules → Security → UI → RuntimeUsers | Users | Permissions | Policies | Secrets | Monitor
Security Secrets (Reference): Securely store and manage sensitive credentials such as passwords, API keys, and connection strings without exposing plain-text values in your configuration.
Security Secrets provide:
Access at: Security → Secrets
Property | Description | Required | Access Control |
|---|---|---|---|
Name | Unique identifier for the secret. Referenced from other tables as | Yes | All users |
SecretType | Type of credential (Password, APIKey, Token) — currently informational; all three types resolve through the same mechanism. | Yes | All users |
SecretValue | Encrypted credential value (AES-256) | Yes | Administrators only |
Description | Documentation of usage/purpose | No | All users |
Important: Only administrators can view or edit SecretValue. Standard users can reference secrets in configurations but cannot see the actual values.
A secret is referenced (never pasted inline) from any password or credential field using a single, platform-wide syntax:
/secret:<Name>
The colon form is the stored syntax that FrameworX resolves at runtime. Older documentation showing a dash form (/secret-<Name>) is stale — use the colon form.
In the Designer, most fields that accept a secret reference render with a dropdown picker that writes the correct /secret:<Name> value for you; the field may also display a friendly label like [Secret: <Name>] — that is the UI label, while the stored value is always /secret:<Name>.
Inside a larger configuration string (such as a connection string that mixes plain text and one or more secrets), the embedded form is used:
#</secret:<Name>/secret>
The same server-side resolver decrypts both forms.
Resolution happens server-side during value decryption. Password-bearing fields that already flow through the platform's TPassword decryption pipeline get secret resolution automatically — consumer modules (Dataset, Device, TagProvider, Historian) do not implement their own lookup. A missing or misnamed reference silently returns the raw text unchanged, which means the downstream connection attempt will fail as if the password were wrong; check the audit log to diagnose.
When configuring database connections:
/secret:<Name>; the Designer may display it as [Secret: <Name>]Stored value example:
Database: RuntimeUsers Authentication: SQL Server Auth Username: dbuser LogonPassword: /secret:DBRuntimePass
See Datasets DBs Reference for the complete DB-row schema.
For MQTT, OPC UA, and other protocols:
/secret:<SecretName>Example:
MQTT Broker Authentication: Username: mqttuser Password: /secret:MQTTBrokerPass
For security reasons, there is no access to secrets via script, only through the configuration UI in each scenario where secrets can be applied.
Name | SecretType | SecretValue | Description |
|---|---|---|---|
DBProductionPass | Password | ******** | Production SQL Server |
MQTTBrokerPass | Password | ******** | MQTT cloud broker |
RuntimeUsersDBPassPassword[encrypted]RuntimeUsers SQL authentication/secret:RuntimeUsersDBPassAction | Administrator | Engineer | Guest |
|---|---|---|---|
Create Secret | Yes | Yes | Yes |
Edit SecretValue | Yes | No | No |
View SecretValue | No | No | No |
Reference in Config | Yes | Yes | Yes |
View Secret List | Yes | Yes | Yes |
Pattern | Example | Use For |
|---|---|---|
|
| Database passwords |
/secret:<Name>ProductionSQLPassSecret1DevDBPass, ProdDBPassWhen exporting solutions:
/secret:<Name> references in consumer fields carry over unchanged — recreate the secrets with the same Names to keep references validIssue | Cause | Solution |
|---|---|---|
Connection fails as if password is wrong | Reference uses the older dash form | Use the colon form |
"Access denied" when editing a secret | Insufficient permissions | Use administrator account |
Connection fails after rotation | New SecretValue incorrect or caching | Verify and re-enter value; restart the consuming connector or reload the project |
Secret list empty | Filter applied | Check module filter settings |
Test secret configuration:
/secret:<Name>Secret operations are logged:
/secret:<Name>