Error when deploy BizTalk application in VS if your account is removed from sysadmin role in SQL.
The problem:
===========================
When a user account’s SQL sysadmin role is removed and only leaves it with public, the user cannot use Visual Studio to deploy BizTalk application after you edit the server name, even if the account is in BizTalk Server Administrators group. An Error <No BizTalk Configuration database(s) found on server ''.> is displayed in VS.
According to SQL profiler trace captured when the error occurs, the stored procedure sp_databases will be called to retrieve the list of databases on the SQL server.
On SQL server 2012, when I manually execute this stored procedure with only public role(sysadmin removed), the sp returns a blank result even if my account is in BizTalk Server Administrators group which has access to BizTalk databases.
exec sp_databases
On SQL server 2008 R2, the same sp properly returns databases with public only.
If we check the code of this sp, looks like it should at least return the databases which the account has permission to access.
select
DATABASE_NAME = db_name(s_mf.database_id),
DATABASE_SIZE = convert(int,
case -- more than 2TB(maxint) worth of pages (by 8K each) can not fit an int...
when sum(convert(bigint,s_mf.size)) >= 268435456
then null
else sum(convert(bigint,s_mf.size))*8 -- Convert from 8192 byte pages to Kb
end),
REMARKS = convert(varchar(254),null)
from
sys.master_files s_mf
where
s_mf.state = 0 and -- ONLINE
has_dbaccess(db_name(s_mf.database_id)) = 1 -- Only look at databases to which we have access
group by s_mf.database_id
order by 1
Workaround:
===========================
According to MSDN, the sp_databases stored procedure requires the following permissions
https://msdn.microsoft.com/en-us/library/ms176070.aspx?f=255&MSPPError=-2147217396
Permissions
Requires CREATE DATABASE, or ALTER ANY DATABASE, or VIEW ANY DEFINITION permission, and must have access permission to the database. Cannot be denied VIEW ANY DEFINITION permission.
===========================
Therefore, we can grant view any definition permission to specific user which needs to deploy BizTalk application in VS.
USE master GO GRANT VIEW ANY DEFINITION TO "SQLUser" |
Best regards,
WenJun