Azure SQL Server 用户角色

问题描述 投票:0回答:1

我的 Azure 订阅上有两台服务器,用于在我的 adf 工作中用于 SQL Server 数据库

我最初创建了它们,并创建了相同的用户 ID 以用于两者 - 一台服务器用于开发,另一台服务器用于生产。据我记得,这两个用户都是以相同的方式创建的..但是..这只是我的回忆。

现在在开发服务器上,我在数据库“DBName”中创建了用户定义的类型 - 一个表类型,以及一个使用它的存储过程。一切正常 然后,当我尝试使用脚本在产品上执行相同操作时,我能够创建类型并在对象资源管理器中查看它。但是,在创建存储过程时,出现此错误

消息 15151,级别 16,状态 1,过程 myStoredProcedure,第 2 行 [批处理开始第 5 行] 找不到类型“MyTypeTBL”,因为它不存在或您没有权限。

是否是用户角色在产品服务器上导致了此问题?有没有办法比较两个服务器之间的用户角色以确保它们相同? 我有一个在产品中运行的数据工厂管道,成功使用该用户来运行存储过程和选择数据。我还与该用户一起创建表和存储过程。 我可以做什么来解决这个问题?

sql-server azure-sql-database user-permissions
1个回答
0
投票

我不确定为什么会出现这种情况,但我是这样解决的:

我找到了一个保存我运行的命令的sql文件,所以我有以下内容

CREATE USER [azuser] 
WITH PASSWORD = 'myPasswd',
DEFAULT_SCHEMA = dbo; 

-- 2) - add user to role(s) in db 
ALTER ROLE db_datareader ADD MEMBER [azuser]; 
ALTER ROLE db_datawriter ADD MEMBER [azuser];
ALTER ROLE [db_accessadmin] ADD MEMBER [azuser];
ALTER ROLE [db_owner] ADD MEMBER [azuser];

这意味着,我在启动所有操作之前运行了这些命令 我添加了以下内容并解决了问题。

ALTER ROLE [db_ddladmin] ADD MEMBER [azuser];
-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'azuser'
GO

GRANT EXECUTE ON OBJECT::[dbo].[MyTypeTBL]
TO azuser;  
GO  
© www.soinside.com 2019 - 2024. All rights reserved.