当前位置:Gxlcms > 数据库问题 > Sql Server来龙去脉系列 必须知道的权限控制基础篇

Sql Server来龙去脉系列 必须知道的权限控制基础篇

时间:2021-07-01 10:21:17 帮助过:31人阅读

Create a database
CREATE DATABASE database_name 
[ CONTAINMENT = { NONE | PARTIAL } ]
[ ON 
      [ PRIMARY ] <filespec> [ ,...n ] 
      [ , <filegroup> [ ,...n ] ] 
      [ LOG ON <filespec> [ ,...n ] ] 
] 
[ COLLATE collation_name ]
[ WITH  <option> [,...n ] ]
[;]

<option> ::=
{
      FILESTREAM ( <filestream_option> [,...n ] )
    | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias }
    | DEFAULT_LANGUAGE = { lcid | language_name | language_alias }
    | NESTED_TRIGGERS = { OFF | ON }
    | TRANSFORM_NOISE_WORDS = { OFF | ON}
    | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 
    | DB_CHAINING { OFF | ON }
    | TRUSTWORTHY { OFF | ON }
}

<filestream_option> ::=
{
      NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
    | DIRECTORY_NAME = ‘directory_name‘ 
}

<filespec> ::= 
{
(
    NAME = logical_file_name ,
    FILENAME = { ‘os_file_name‘ | ‘filestream_path‘ } 
    [ , SIZE = size [ KB | MB | GB | TB ] ] 
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
)
}

<filegroup> ::= 
{
FILEGROUP filegroup name [ [ CONTAINS FILESTREAM ] [ DEFAULT ] | CONTAINS MEMORY_OPTIMIZED_DATA ]
    <filespec> [ ,...n ]
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}
技术分享

    具体参数请参考:https://msdn.microsoft.com/zh-cn/library/ms176061(v=sql.120).aspx

    现在我们通过权限管理系统创建数据库,在创建界面输入数据库参数,如下图所示:

技术分享

    点击“创建”按钮后, 服务器自动生成数据库创建SQL语句 ,如下:

技术分享
USE master;
CREATE DATABASE HeaviDb 
ON(
Name = HeaviDb,
FILENAME = ‘D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\HeaviDb.mdf‘,
SIZE = 10,
FILEGROWTH = 2MB,
MAXSIZE = 500)
技术分享

    在创建数据库时,我们一般要把当前数据库切换到master数据库。上面的语句只指定了FILENAME,而没有指定log的FILENAME,这种情况SQL SERVER会自动在FILENAME同目录下为我们自动创建HeaviDb_log.ldf文件。SIZE设置为10,这里没有单位,默认单位为MB,也可以显示指定KB、MB、GB、TB后缀,例如SIZE = 10MB或者SIZE = 10GB。FILEGROWTH设置为2MB,即数据库按照2MB自增长,另外我们也可以按照百分比增长,例如FILEGROWTH = 10%。MAXSIZE设置为500,默认单位也是MB。如果我们不限制数据库文件大小,可直接用UNLIMITED代替MAXSIZE = 500。执行以上SQL语句,我们就能在数据库中查看到该数据库了。

修改数据库

    这一节讨论怎样修改数据库,但这里会涉及到比较核心的知识点。在权限管理系统中,选中数据库列表某一列,点击“修改”按钮,弹出修改数据库界面。但这里有一个问题,在数据库列表中只包含了 数据库名称、文件以及数据库所有者信息。而我们修改界面展示了数据库初始大小以及自增长值。这些信息在列表中是没有的。但通过数据库查询我们知道这些信息保存在sys.master_files中。执行查询语句:

select 
mf.database_id as DbId, mf.name as Name, 
mf.size as InitSize, mf.max_size as MaxSize, mf.growth as Growth, mf.is_percent_growth as IsPercentGrowth 
from sys.master_files mf where mf.type = 0

    查询结果如下:

技术分享

    查询的数据结果我们不能直接使用,数据库大小InitSize、数据库最大值MaxSize、自增长值Growth这些数据不能直接展示在界面,那这些数据到底是什么意思呢?先看看msdn对这几个字段的描述:

size int 当前文件大小(以 8 KB 为单位的页数)。 对于数据库快照来说,size 表示该快照可以一直用于文件的最大空间。
max_size int

最大文件大小(以 8 KB 为单位的页数):

0 = 不允许增长。

-1 = 文件将一直增长到磁盘充满为止。

268435456 = 日志文件将增长到最大大小 2 TB。

growth int

0 = 文件大小固定,不会增长。

>0 = 文件将自动增长。

如果 is_percent_growth = 0,则以若干个 8 KB 页为增量递增,舍入为 64 KB

如果 is_percent_growth = 1,增量将用整数百分比表示。

is_percent_growth bit

1 = 文件的增长以百分比表示。

0 = 以页数为单位表示绝对增长大小。

    分析几个字段:

    1.size:没有直接存储文件大小,而是存储文件的总页数,每一页大小为8KB。以MB为size单位,size的实际值则应该为:(size * 8 /1024)MB;

    2. max_size:有三种值,一是等于-1,二是等于0,另一种是大于0 。等于-1表示UNLIMITED(没有限制)。等于0表示不允许增长。大于0时和size相似,以MB为max_size单位,max_size实际值则应该为:(max_size * 8 /1024)MB;

    3.is_percent_growth:值等于0或者1,等于1表示按百分比自增长。等于0表示按固定值增长;

    4.growth:等于0表示固定大小,不会自增增长。大于0时依赖于is_percent_growth的值。如果is_percent_growth=0,growth按固定数字自增长。以MB为单位,growth实际值为(growth * 8 /1024)MB。如果is_percent_growth=1,则growth的实际值为growth%;

    以上字段了解清楚后,我们的数据库文件参数就能显示出来了。例如,修改刚才创建的HeaviDb数据库,弹出修改界面如下:

技术分享

   修改初始值为20,增长方式为pecent并且值为10,文件最大值没有限制。这里需要说明几点:

    1.修改的初始值不能小于当前数据库文件的实际大小;

    2.如果文件最大值限制为固定值,那么这个固定值不能小于当前数据库大小以及修改后的数据库大小(初始值);

    修改参数后界面如下:

技术分享

    点击“保存”按钮,后台生成的SQL语句如下:

USE master;
ALTER DATABASE HeaviDb 
MODIFY FILE (Name = HeaviDb,SIZE = 20,FILEGROWTH = 20,MAXSIZE = UNLIMITED)

    修改数据库使用DDL的ALTER DATABASE语句,修改文件使用MODIFY FILE语句。完整的数据库修改SQL请查看:

https://msdn.microsoft.com/zh-cn/library/ms174269(v=sql.120).aspx。

删除数据库

    数据库的删除语句比较简单,SQL与语句如下:

USE master;
DROP DATABASE HeaviDb

    删除数据库必须知道:系统数据库是不能删除的;不能删除正在使用的数据库。

总结

    本篇随笔主要介绍了登录账号的查询、创建、修改、删除,以及数据库的查询、创建、修改、删除所涉及的系统视图以及DDL语句。通过这篇内容我们能够比较清楚的了解登录账号以及数据库在SQL SERVER中的存储元数据结构。本篇的内容都是一些基础知识,但同时也是比较重要的基础知识。下一篇将会详细分析数据库中登录账号和数据库的权限设置。

Sql Server来龙去脉系列 必须知道的权限控制基础篇

标签:库文件   off   元数据   read_only   [1]   在线   基础   语法   数据库管理   

人气教程排行