Вы могли бы рассмотреть возможность структурирования вашей базы данных, которая ссылается на другую, так что все удаленные таблицы доступны через представления. Я обычно придерживаюсь соглашения об именах:
vw_[DATABASENAME]_[TABLENAME]
Представление состоит не более чем из:
select * from server.dbo.tablename
Все хранимые процедуры обращаются к удаленным таблицам через представления, а не напрямую, т. Е. Для доступа к таблице Person в вызове удаленной базы данных. Персонал будет:
create view vw_STAFF_Person
as
select * from Staff.dbo.Person
go
create procedure stp_Select_Staff
as
select * from vw_Staff_Person
go
вместо
create procedure stp_Select_Staff
as
select * from Staff.dbo.Person
go
Основанием для этого является то, что когда вы хотите протестировать свою базу данных, вы, вероятно, захотите повторно связать все удаленные базы данных с вашими «тестовыми» удаленными базами данных. Как правило, это легче сделать, когда единственными объектами, обращающимися к удаленным данным, являются простые представления, а не часто более многочисленные и сложные хранимые процедуры.
У меня обычно есть задание, которое может переписать представления в «тестовые» базы данных, так что это делается автоматически.
В дополнение к этому, у меня также часто есть задание, восстанавливающее резервные копии рабочей базы данных в «тестовую» среду, так что тестирование перед развертыванием можно проводить на системах, которые содержат копию живых данных. Опять же, этот процесс становится проще, поскольку требуется только повторно связать представления, а не все сохраненные ссылки на процедуры на удаленные системы.
Чтобы упростить тестирование на безопасность, я также всегда устанавливаю безопасность базы данных на уровне базы данных roles
, а не на конкретных пользователей, поскольку считаю roles
более переносимым в средах производства, тестирования и разработки, users
.
Надеюсь, что некоторые из этих советов помогут.