SQLSERVER新建一张表然后在该表的其中一个字段上建立一个非聚集索引,那麽这张表是堆表还是B树结构的表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLSERVER新建一张表然后在该表的其中一个字段上建立一个非聚集索引,那麽这张表是堆表还是B树结构的表相关的知识,希望对你有一定的参考价值。

参考技术A 没有聚集索引的表都是堆表追问

有证据吗?

追答

没什么证据,常识呵呵
数据内部结构是以聚集索引列作为物理顺序排列,所以才能构成树结构
与非聚集所以无关

SQL Server:你能限制对一张表的访问吗

【中文标题】SQL Server:你能限制对一张表的访问吗【英文标题】:SQL Server : can you limit access to only one table 【发布时间】:2012-04-04 22:25:48 【问题描述】:

我认为答案是否定的,但我希望让某人访问 SQL Server 数据库,但我真的只希望他们可以访问一个表。

限制某人只能访问一个数据库很容易,但不知道我是否可以限制为单个表。

我的想法是用另一个表的同义词创建另一个数据库,然后限制对该数据库的访问,但我想知道是否有人能想到更好的方法。

我也不相信它会起作用,因为我认为会有权限冲突。

【问题讨论】:

如果您愿意,可以让人们访问单个,创建他们的登录名并授予对您的表的选择权限 【参考方案1】:

是的。

exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO

GRANT SELECT ON [schemaName].[tableName] to [username]
Go 

虽然这可行,但您最好使用 roles 和 AD 组来管理权限。

【讨论】:

【参考方案2】:

循环遍历所有表并拒绝访问的问题是如果您添加一个新表。

重要的是不要让用户“db_datareader”访问整个数据库。使用 UI,您可以使用登录下的用户映射选项卡,您可以创建仅具有“公共”访问权限的用户。然后,您可以转到数据库并授予该用户对特定表的 SELECT 访问权限(通过单击 Securables 选项卡下奇怪的“搜索”按钮)。

这种方法当然也适用于脚本。

【讨论】:

这比接受的答案更有帮助。我不明白为什么这个答案的票数更少。【参考方案3】:
GRANT SELECT ON [SchemaName].[TableName] to [UserName]

【讨论】:

这如何保护其余的表? 它没有,这就是为什么答案没有被标记为接受,而接受的答案却被标记的原因。不知道你是不是要我指出我错了几个月后我早就忘记了这个答案后的一些奇怪的原因,无论哪种方式,希望我的评论有所帮助。 抱歉这个问题是在聊天中引起我注意的。当我发表评论时,我实际上并没有意识到这个问题有多老。尽管如此,我认为对原始问题的答案的各个方面提出质疑是有效的,无论其接受状态或投票数如何。很多问题都没有公认的答案,而这个问题仍然存在,因为答案旨在帮助 OP 未来的读者。许多人可能会认为页面上的任何答案都是答案。 这可能不完全符合提问者的要求,但这正是我想要的:)【参考方案4】:

当然。 GRANT你想要的权限。

当您授予用户访问数据库的权限时,请查看为他们分配的角色以及这些角色拥有的权限。

问题在于人们通常在一开始就授予了过于宽泛的权限。

【讨论】:

【参考方案5】:

当然可以。创建用户并授予他们对数据库的访问权限后,仅授予对该表的选择访问权限(或他们需要的任何级别)。

【讨论】:

【参考方案6】:

更好的方法是创建一个单独的schema,在该schema 中创建一个proc。然后允许用户EXECproc。而已。您可以在 schema 中创建一个 view,这可能是您所追求的更多。

【讨论】:

【参考方案7】:

更好的方法是为该特定表创建安全的。 IT 会问你要保护什么;表、视图、数据库。然后选择特定的表来保护该用户并将该用户排除在该表之外。

【讨论】:

以上是关于SQLSERVER新建一张表然后在该表的其中一个字段上建立一个非聚集索引,那麽这张表是堆表还是B树结构的表的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:从一张表的 9 列中返回最常出现的值(和计数)

SQL server 数据库 如何把一张表复制到另一个数据库表中

mysql 和 sqlserver中备份一张表的区别

SQL server 数据库 如何把一张表复制到另一个数据库表中

如何将数据库中一张表的全部内容复制到数据库中另一张表中

如何将DB2数据导入到SQLSERVER中