FIX: Cross-Database INSERTS May Fail with Error 229 (160541)



The information in this article applies to:

  • Microsoft SQL Server 6.5

This article was previously published under Q160541
BUG #: 16276

SYMPTOMS

A stored procedure run by a user who has full execute permissions and who is a valid user in two databases may fail with the following error on a cross-database INSERT:
229 %s permission denied on object %.*s, database %.*s, owner %.*s

This problem occurs even if the owner of the underlying table is also the owner of the stored procedure. This problem occurs if the stored procedure needs to be re-resolved, such as in the following cases: loading from backup, dropping and recreating an underlying table, or shutting down and restarting SQL Server (if the stored procedure references a temporary table). If the stored procedure is dropped and re-created, it works properly until one of the re-resolutions mentioned above occurs.

WORKAROUND

To work around this problem, do either of the following:
  • Take the temporary table creation out of the stored procedure; create the temporary table before calling the stored procedure.

    -or-
  • Drop and re-create the affected stored procedure after a re-resolution event has occurred.

STATUS

Microsoft has confirmed this to be a problem in SQL Server version version 6.5. This problem has been corrected in U.S. Service Pack 2 for Microsoft SQL Server version 6.5. For more information, contact your primary support provider.

Modification Type:MajorLast Reviewed:10/3/2003
Keywords:kbBug kbfix kbusage KB160541