Programming language used to interact with SQL Server databases
My repro above was a little confusing, because when I anonymised the table and database name, I was inconsistent.
When I tested a little more I found something which is a little puzzling. Look at this:
CREATE DATABASE tester
go
USE tester
go
CREATE TABLE testtbl (a int NOT NULL)
go
USE tempdb
go
CREATE LOGIN testlogin WITH PASSWORD = 'ThisWeeksWeakPassword?'
EXECUTE AS LOGIN = 'testlogin'
go
PRINT 'sys.tables'
SELECT * FROM sys.fn_my_permissions('tester.sys.tables', 'OBJECT')
go
PRINT 'dbo.testtbl'
SELECT * FROM sys.fn_my_permissions('tester.dbo.testtbl', 'OBJECT')
go
PRINT 'dbo.nosuchtbl'
SELECT * FROM sys.fn_my_permissions('tester.dbo.nosuchtbl', 'OBJECT')
go
REVERT
DROP LOGIN testlogin
DROP DATABASE tester
The first and last SELECT runs without error. It is only if you are querying about an actual object that you get an error.