评论太长了。
GRANT <n> ON YourDatabase.YourSchema.YourTable TO YourSpecificUser
在这种情况下,由于它是一个表,<n> 可以是以下之一:
DELETE
INSERT
REFERENCES
SELECT
UPDATE
请注意,如果用户拥有fixed database role,他们可能拥有比您明确授予他们更多的访问权限。阅读有关GRANT Object Permissions 的更多信息。
注意,要返回表的权限列表,您可以使用sp_table_privileges
sp_table_privileges @table_name = 'YourTable'
您可以捕获这些结果,然后循环它们以构建动态 sql 查询。
将下面的脚本替换为您的 TableName 以及您的 NewTableName 是什么。当您对打印输出感到满意时,您可以取消注释 exec(@sql) 以执行打印的代码。
if object_id('tempdb..#priv') is not null
drop table #priv
create table #priv( ID int identity (1,1)
,TABLE_QUALIFIER varchar(64)
,TABLE_OWNER VARCHAR(64)
,TABLE_NAME VARCHAR(64)
,GRANTOR VARCHAR(64)
,GRANTEE VARCHAR(64)
,PRIVILEGE VARCHAR(64)
,IS_GRANTABLE VARCHAR(8))
insert into #priv
exec sp_table_privileges @table_name = 'YourTableName'
declare @i int = 1
declare @max int = (select max(id) from #priv)
declare @sql varchar(max) = ''
while (@i <= @max)
begin
set @sql = @sql + (select ' GRANT ' + stuff(PRIVILEGE,1,0,' ') + ' ON ' + stuff(TABLE_NAME,1,0,' ') + ' TO ' + stuff(GRANTEE,1,0,' ') + char(13) + ' GO ' + char(13) from #priv where ID = @i)
set @i = @i + 1
end
print(@sql)
set @sql = replace(@sql,'YourTableName','NewTableName')
print(@sql)
--exec(@sql)