How to: Grant Users Access to SQL Server Modeling Services
[This content is no longer valid. For the latest information on "M", "Quadrant", SQL Server Modeling Services, and the Repository, see the Model Citizen blog.]
This tutorial demonstrates how to grant users access to the SQL Server Modeling Services database. This includes granting permissions to users for specific operations on Modeling Services Folders.
Note that part of this tutorial depends on the Modeling Services Folders tutorial. This tutorial assigns permissions to the HumanResourcesApp
Folder. For more information, see How to: Create and Use SQL Server Modeling Services Folders.
This tutorial uses SQL Server Studio and T-SQL scripts to perform these administrative tasks in the Modeling Services database.
To create a new SQL Server login and user
On the Start menu, click All Programs, Microsoft SQL Server 2008, and open SQL Server Management Studio.
In the Connect to Server dialog, type the name of the Modeling Services server in the Server name combo box.
Specify the Authentication properties, and then click the Connect button.
Note
Managing Modeling Services permissions requires the caller to belong to either the RepositoryAdministrator role or the SQL Server sysadmin role.
On the toolbar, click the New Query button. A blank query window should open.
In the blank query window, add the following T-SQL statements. These statements create a new SQL Server login for a Windows domain account. It also creates a new Modeling Services user, named
domainuser
, for this login.Note
In the following script, change the
DOMAINNAME\username
name to a valid Windows domain account in your environment.use Repository go -- Add a domain account login to SQL Server. if not exists(select * from sys.syslogins where name = 'DOMAINNAME\username') create login [DOMAINNAME\username] from windows go -- Add this windows login as a user to the Repository database. if not exists(select * from sys.sysusers where name = 'domainuser') create user domainuser for login [DOMAINNAME\username]; go
Press the F5 key to run the T-SQL query.
To grant the user read access to the Modeling Services database
At this point, you have created a new Windows login and a new Modeling Services database user,
domainuser
. However, the new user requires additional permissions to access Modeling Services views, stored procedures, and other database objects.In the SQL Server Management Studio query window, replace the previous text with the following T-SQL statements.
-- Add the user to a RepositoryReader role. exec sp_addrolemember N'RepositoryReader', N'domainuser' go
Press the F5 key to run the T-SQL query. The new user is now a member of the RepositoryReader role.
Note
Other available Modeling Services roles include RepositoryReaderWriter for read/write access and RepositoryAdministrator for administrative access.
To view the default Modeling Services Folder permissions for the user
Updatable security views in the Modeling Services database further filter the results that a user sees based on Modeling Services Folder permissions. To examine the effect of these permissions, first log onto a separate machine using the Windows login associated with the
domainuser
user. Note that this could also be accomplished by launching SQL Server Management Studio from the command prompt with the runas utility.Note
Do not close the original query window opened with your administrative credentials. This tutorial requires the use of this administrative query window to change permissions for the new user. For the remainder of this tutorial, the two windows are referred to as the “administrative query window” and the “
domainuser
query window”.On the
domainuser
machine, open SQL Server Management Studio. On the File menu, select New, and then click Database Engine QueryIn the Connect to Database Engine dialog, specify the name of the Modeling Services server in the Server name combo box.
In the Authentication drop-down list, select Windows Authentication.
Press the Connect button to open a query window.
In the new
domainuser
query window, add the following T-SQL statements.use Repository go select * from [Repository.Item].[CurrentPermissions]
Press the F5 key to run the T-SQL query. This should show that the domain user has the read operation granted for an Modeling Services Folder with an identifier of
1
. This Folder is namedRepository
, and it is the default Folder that owns many Modeling Services database objects.In the
domainuser
query window, replace the text with the following T-SQL statement. This query uses the updatable security view, [Repository.Item].[Folders], to get a list of the Modeling Services Folders that this user has rights to view.select * from [Repository.Item].[Folders]
Press the F5 key to run the T-SQL query. Although the underlying table [Repository.Item].[FoldersTable] has more than one Modeling Services Folder, the query of the [Repository.Item].[Folders] view returns only the Folders that the current user has permissions to view. In this case, there is only one row returned for the
Repository
Folder.Note
Note that the user received read access to the Folder,
Repository
, by joining the RepositoryReader role. Any rows owned by this default Folder can be read by members of the RepositoryReader role without granting additional permissions. In the same way, any rows owned by this default Folder can be updated by members of the RepositoryReaderWriter role without granting additional permissions.
To grant the user read permissions on an Modeling Services Folder
Although users have read access to the default
Repository
Folder, most users will need additional permissions to other Folders that secure Modeling Services data. In this tutorial, you will grant permissions to thedomainuser
user to read data that belongs to theHumanResourcesApp
Folder. For more information about how to create this Folder, see How to: Create and Use SQL Server Modeling Services Folders. In the administrative query window, replace the existing text with the following T-SQL statements.-- Obtain the Id for the Applications Folder by name. declare @folder as [Repository.Item].[FolderId] set @folder = [Repository.Item].[PathsFolder](N'HumanResourcesApp') -- Folder Resource Kind. declare @target_resourceKind as [Repository.Item].[SecuredResourceKindId] select @target_resourceKind = Id from [Repository.Item].[SecuredResourceKinds] where Name = N'https://schemas.microsoft.com/Repository/2007/10/Identity/Resources/Folder' -- Read Operation. declare @target_operation as [Repository.Item].[SecuredOperationId] select @target_operation = Id from [Repository.Item].[SecuredOperations] where Name = N'https://schemas.microsoft.com/Repository/2007/10/Operations/Read' -- Call GrantPrincipalPermission passing in the new login. -- The claim kind, SID, and the SID itself are -- generated by the stored procedure. exec [Repository.Item].[GrantPrincipalPermission] @principal = 'domainuser', @resourceKind = @target_resourceKind, @resource = @folder, @operation = @target_operation, @mayGrantOrRevoke = 1 go
Note
Note that the possible operations to grant include read (“https://schemas.microsoft.com/Repository/2007/10/Operations/Read”) and update (“https://schemas.microsoft.com/Repository/2007/10/Operations/Update”).
Press the F5 key to run the T-SQL query. This query first obtains the identifier for the
HumanResourcesApp
Folder. It then gets the [Repository.Item].[SecuredResourceKindId] for the Modeling Services Folder resource kind. It also gets an [Repository.Item].[SecuredOperationId] for the read operation. Each of these values is passed as a parameter to the [Repository.Item].[GrantPrincipalPermission] stored procedure. This grants thedomainuser
user the read operation on theHumanResourcesApp
Folder.To see the effect of this permissions change, open a new query window with the Windows login associated with the
domainuser
user. Do this in the SQL Server Management Studio instance on the other machine. Make sure that you are logged onto that machine with the target Windows domain account.Note
Do not use the
domainuser
query window open from the previous steps. Permissions are cached for each database connection. A new connection is required to observe the new permissions.In the new
domainuser
query window, add the following T-SQL statements. These are the same statements that were run previously.use Repository go -- View the user's current permissions. select * from [Repository.Item].[CurrentPermissions] -- View the Repository Folders visible for this user. select * from [Repository.Item].[Folders]
Press the F5 key to run the T-SQL query. Note that the first set of results shows that the user has Read access to the
HumanResourcesApp
Folder. The second set of results demonstrates the effect of this new permission. The query to the updatable security view, [Repository.Item].[Folders], returns the Modeling Services Folders that the user has permissions to see. It now lists both the defaultRepository
Folder, theHumanResourcesApp
Folder, and any subfolders of theHumanResourcesApp
Folder.Note
Note that Folder permissions are recursive. For example, if the
HumanResourcesApp
Folder had several layers of subfolders, permissions on theHumanResourcesApp
Folder would grant permissions on each subfolder as well.
See Also
Tasks
How to: Remove User Permissions
Concepts
Security Tasks (Modeling Services)
SQL Server Modeling Services Folder Design Patterns