PRO: Login Blocks #
All features described on this page are part of the Professional Edition.
You can purchase licenses for the Professional Edition on the Portal: https://portal.sqldsc.com.
Starting in 1.37, login blocks provide a simple way for the PRO Edition to configure permissions for a login. A sample looks like this:
login "PROD\read-only" {
permissions = ["view server state"]
user_databases {
roles = ["db_datareader"]
}
database "msdb" {
roles = ["db_datareader", "SQLAgentReaderRole"]
}
}
This block takes takes the following actions:
- Create the
PROD\read-onlylogin if it doesn’t exist - Grant
view server stateto the login - In each user database, create the user and add it to the
db_datareaderrole - In the
msdbdatabase, create the user and add it to thedb_datareaderandSQLAgentReaderRoleroles
Login Block Schema #
- The
loginattribute is optional and is only used for variables. - There can be multiple
databaseanduser_databasesblocks.
login "account_name" {
# optional - overrides account_name above
# only used with variables
login = "account_name"
sqldsc_credential = "credential_name"
# configuring the login
disabled = true|false
default_database = "database"
sid = "sid"
check_policy = true|false
check_expiration = true|false
roles = ["server", "roles"]
permissions = ["server", "permissions"]
database "db_name" {
default_schema = "dbo"
roles = ["database", "roles"]
permissions = ["database", "permissions"]
exec = ["procs", "to", "grant", "exec"]
schema "schema_name" {
permissions = ["schema", "permissions"]
}
}
user_databases {
default_schema = "dbo"
include = ["limit", "list"]
exclude = ["not", "these", "databases"]
permissions = ["select", "exec"]
roles = ["database", "roles"]
schema "schema_name" {
permissions = ["insert", "update"]
}
}
}
Notes #
- SQL Server 2008 isn’t officially supported. But if you are using
loginblocks on SQL Server 2008, set thedefault_schemato "” (an empty string) and you can create domain groups with no default schema. - Starting in 1.43, if you have a database block for a non-existent database, it will be skipped. This is useful for system databases that may or may not exist such as
SSISDB. An example is adding a login for backups. It would need to be added to each system database that exists. Those will need to be listed in the login block but will be skipped if they aren’t present.