我的 Azure 订阅上有两台服务器,用于在我的 adf 工作中用于 SQL Server 数据库
我最初创建了它们,并创建了相同的用户 ID 以用于两者 - 一台服务器用于开发,另一台服务器用于生产。据我记得,这两个用户都是以相同的方式创建的..但是..这只是我的回忆。
现在在开发服务器上,我在数据库“DBName”中创建了用户定义的类型 - 一个表类型,以及一个使用它的存储过程。一切正常 然后,当我尝试使用脚本在产品上执行相同操作时,我能够创建类型并在对象资源管理器中查看它。但是,在创建存储过程时,出现此错误
消息 15151,级别 16,状态 1,过程 myStoredProcedure,第 2 行 [批处理开始第 5 行] 找不到类型“MyTypeTBL”,因为它不存在或您没有权限。
是否是用户角色在产品服务器上导致了此问题?有没有办法比较两个服务器之间的用户角色以确保它们相同? 我有一个在产品中运行的数据工厂管道,成功使用该用户来运行存储过程和选择数据。我还与该用户一起创建表和存储过程。 我可以做什么来解决这个问题?
我不确定为什么会出现这种情况,但我是这样解决的:
我找到了一个保存我运行的命令的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