SQL Server: ¿Cómo permitir esquemas?

Inspirado por varias preguntas relacionadas con el esquema que he visto ...

Encadenamiento de propiedad me permite OTORGAR EJECUTAR un procedimiento almacenado sin permisos explícitos en las tablas que uso, si tanto el procedimiento almacenado como las tablas están en el mismo esquema.

Si utilizamos esquemas separados, entonces tendría que OTORGAR explícitamente XXX en las tablas de esquemas diferentes. El ejemplo de encadenamiento de propiedad lo demuestra. Esto significa que el usuario ejecutor del proceso almacenado puede leer / escribir sus tablas directamente.

Esto sería como tener acceso directo a las variables de su instancia en una clase, omitiendo getter / setters, rompiendo la encapsulación.

También utilizamos seguridad de nivel de fila para restringir lo que alguien ve y lo aplicamos en los procedimientos almacenados.

Entonces, ¿cómo podemos mantener la separación del esquema y evitar el acceso directo a la tabla?

Por supuesto, la pregunta no se aplicará si usa un ORM o no usa procesos almacenados. Pero soyno preguntando si debo usar un ORM o un proceso almacenado en caso de que alguien sienta la necesidad de iluminarme ...

Editar, ejemplo

CREATE USER OwnsMultiSchema WITHOUT LOGIN
GO
CREATE SCHEMA MultiSchema1 AUTHORIZATION OwnsMultiSchema
GO
CREATE SCHEMA MultiSchema2 AUTHORIZATION OwnsMultiSchema
GO

CREATE USER OwnsOtherSchema WITHOUT LOGIN
GO
CREATE SCHEMA OtherSchema AUTHORIZATION OwnsOtherSchema
GO

CREATE TABLE MultiSchema1.T1 (foo int)
GO
CREATE TABLE MultiSchema2.T2 (foo int)
GO
CREATE TABLE OtherSchema.TA (foo int)
GO

CREATE PROC MultiSchema1.P1
AS
SELECT * FROM MultiSchema1.T1
SELECT * FROM MultiSchema2.T2
SELECT * FROM OtherSchema.TA
Go
EXEC AS USER = 'OwnsMultiSchema'
GO
--gives error on OtherSchema
EXEC MultiSchema1.P1
GO
REVERT
GO

CREATE PROC OtherSchema.PA
AS
SELECT * FROM MultiSchema1.T1
SELECT * FROM MultiSchema2.T2
SELECT * FROM OtherSchema.TA
Go
GRANT EXEC ON OtherSchema.PA TO OwnsMultiSchema
GO
EXEC AS USER = 'OwnsMultiSchema'
GO
--works
EXEC OtherSchema.PA
GO
REVERT
GO

Edición 2:

No utilizamos "encadenamiento de propiedad de bases de datos cruzadas"La seguridad a nivel de fila es una pista falsa e irrelevante: no la usamos en todas partes

Respuestas a la pregunta(3)

Su respuesta a la pregunta