SQL
The SQL configuration scraper will execute a SQL query and then create a configuration item for each returned row.
The example below creates a new MSSQL::Database configuration for each database on the sql server, and then creates a roles object container the SQL Server login to database role mapping. With change detection this will highlight when new users are added / modified / removed on an individual databases.
sql:
  - connection: 'sqlserver://localhost:1433?database=master'
    auth:
      username:
        value: sa
      password:
        value: password
    type: MSSQL::Database
    id: $.name
    transform:
      full: true # transform the entire configuration item, and not just the configuration data (row)
      script:
        javascript: |+
          var dbs = {}
          for (var i = 0; i < config.rows.length; i++) {
            var db = config.rows[i]
            var name = db.DB
            if (dbs[db.DB] == null) {
              {
                config:               dbs[db.DB] = {
                  name: name,
                  roles: {}
                },
                changes: {
                },
                analysis: {
                }
              }
            }
            dbs[name].roles[db.role] = db.name
          }
          JSON.stringify(_.values(dbs))
    query: |
      declare  @mytable table (
        [DB] [nvarchar](128) NULL,
        [name]  [nvarchar](255)  NOT NULL,
        [role]  [nvarchar](255)  NOT NULL
        )
      DECLARE @command varchar(1000)
      SELECT @command =
      'USE ?; SELECT DB_NAME() as DB, DP1.name AS [user],
        isnull (DP2.name, ''No members'') AS [role]
      FROM sys.database_role_members AS DRM
      RIGHT OUTER JOIN sys.database_principals AS DP1
        ON DRM.role_principal_id = DP1.principal_id
      LEFT OUTER JOIN sys.database_principals AS DP2
        ON DRM.member_principal_id = DP2.principal_id
      WHERE DP1.type = ''R'' and DP2.name is not null'
      insert into @mytable  EXEC sp_MSforeachdb @command
      select * from @mytable
 
| Field | 
Description | 
Scheme | 
Required | 
id | 
A static value or JSONPath expression to use as the ID for the resource. | 
string | 
true | 
name | 
A static value or JSONPath expression to use as the Name for the resource. Default value is the id. | 
string | 
false | 
items | 
A JSONPath expression to use to extract individual items from the resource | 
string | 
false | 
type | 
A static value or JSONPath expression to use as the type for the resource. | 
string | 
true | 
transform | 
Specify field to transform result | 
Transform | 
false | 
format | 
Format of config item, defaults to JSON, available options are JSON | 
string | 
false | 
timestampFormat | 
TimestampFormat is a Go time format string used to parse timestamps in createFields and DeletedFields. If not specified, the default is RFC3339. | 
string | 
false | 
createFields | 
CreateFields is a list of JSONPath expression used to identify the created time of the config. If multiple fields are specified, the first non-empty value will be used | 
[]string | 
false | 
deleteFields | 
DeleteFields is a JSONPath expression used to identify the deleted time of the config. If multiple fields are specified, the first non-empty value will be used | 
[]string | 
false | 
| - | 
Specify connection details to the database | 
Connection | 
 | 
driver | 
Specify the name of the driver to use for connecting to the database | 
string | 
false | 
query | 
Specify the SQL query to execute | 
string | 
true | 
| Field | 
Description | 
Scheme | 
Required | 
| connection | 
Specify the connection string for the database | 
string | 
true | 
| auth | 
Specify the authentication details for connecting to the database | 
Authentication | 
false |