在本文中,我们将带你了解重置MSSQL的Identity标识列的值在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的#ShapeIdentity001期:国产ServerlessIdenti
在本文中,我们将带你了解重置 MSSQL 的 Identity 标识列的值在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的#Shape Identity 001 期:国产 Serverless Identity 开源组件工作坊、ActivitiException: Activiti database problem: Tables missing for component(s) identity、Angular 学习系列 - - angular.identity 和 angular.noop、Asp.net core Identity + identity server + angular 学习笔记 (第一篇)。
本文目录一览:- 重置 MSSQL 的 Identity 标识列的值
- #Shape Identity 001 期:国产 Serverless Identity 开源组件工作坊
- ActivitiException: Activiti database problem: Tables missing for component(s) identity
- Angular 学习系列 - - angular.identity 和 angular.noop
- Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
重置 MSSQL 的 Identity 标识列的值

当表中的记录被全部删除,但此时标识列的值越来越大的时候,如果不加以重置,它还会无休止的增长。
可以用如下语句重置标识列
DBCC CHECKIDENT(''table_name'', {RESEED|NORESEED}[,new_reseed_value ])
参数
''table_name''
是要对其当前标识值进行检查的表名。表名必须符合标识符规则。有关更多信息,请参见使用标识符。指定的表必须包含标识列。
NORESEED
指定不应更正当前标识值。
RESEED
指定应该更正当前标识值。
new_reseed_value
是在标识列中重新赋值时要使用的值。
注释
如有必要,DBCC CHECKIDENT 会更正列的当前标识值。然而,如果标识列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 语句中)创建的,则不更正当前标识值。
如果标识列上有主键或唯一键约束,无效标识信息可能会导致错误信息 2627。
对当前标识值所做的具体更正取决于参数规范。
DBCC CHECKIDENT (''table_name'', NORESEED) 不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它指明当前标识值和应有的标识值。
DBCC CHECKIDENT (''table_name'') 或
DBCC CHECKIDENT (''table_name'', RESEED) 如果表的当前标识值小于列中存储的最大标识值,则使用标识列中的最大值对其进行重置。
DBCC CHECKIDENT (''table_name'', RESEED, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。
当前标识值可以大于表中的最大值。在此情况下,DBCC CHECKIDENT 并不自动重置当前标识值。若要在当前标识值大于列中的最大值时对当前标识值进行重置,请使用两种方法中的任意一种:
- 执行 DBCC CHECKIDENT (''table_name'', NORESEED) 以确定列中的当前最大值,然后使用 DBCC CHECKIDENT (''table_name'', RESEED, new_reseed_value) 语句将该值指定为 new_reseed_value。
将 new_reseed_value 置为很小值来执行 DBCC CHECKIDENT (''table_name'', RESEED, new_reseed_value),然后运行 DBCC CHECKIDENT (''table_name'', RESEED)。
原文链接: http://blog.csdn.net/vince6799/article/details/4206861
#Shape Identity 001 期:国产 Serverless Identity 开源组件工作坊
疫情肆虐,不仅对老百姓生命健康造成重大威胁,对各行各业的发展也造成重大影响。同时,开学、复工在即,疫情防控进入了关键阶段,「居家隔离、远程办公」是当下遏制疫情扩散的最佳防控措施。
1918年的西班牙流感席卷全球的模拟
2019 新型冠状病毒(2019-nCoV)使得中国一夜之间成了「全球最大的远程办公数字社会」,但是如此大规模的,敦刻尔克式的“数字化转型”,对「企业协同」、「企业 VPN 性能及安全性」、网络信息安全迎来重要考验, 也难免会出现大量次生安全问题,尤其在春节假期延长,大量企事业单位启动「远程办公」,原本在防火墙内,使用公司设备办公的员工,使用家用 PC 开始办公,并通过公共 WiFi 访问企业内部的数据和应用时,企业网络安全部门面临着空前的安全威胁,其中,「身份安全」是至关重要的一环。
于是,我们发起 # Shape Identity 系列线上技术公开课,旨在倡议:在阻击物理世界「新冠」病毒的同时,不要忽视数字空间的安全。我们将定期邀请业界 Identity 专家一起探讨 Identity 技术的发展!主题涵盖:IDaaS/IAM、Serverless、ZeroTrust、Cloud Native 等开源技术。
第 001 期,定在本周六,2月29日,四年独一无二的日子,也是 2020年的第60天。
本次线上直播 Authing 联合腾讯云、Serverless Framework中文社区,与大家共同探讨:Serverless Framework 组件的开发及应用。本周六(2020-02-29 )13:00——17:00,通过「腾讯会议」 300人在线分享及 Q&A 视频互动、B站直播弹幕互动,
近些年 Serverless 风起云涌,它正在深刻的改变未来软件开发的模式和流程,对于大多数应用而言,借助 Serverless 服务,开发者可以将绝大多数精力投入在业务逻辑的开发整合上,大大缩短开发周期,降低运维成本。Serverless Framework 当属时下最火热的开源框架。
主持人:晋剑 Authing 联合创始人兼COO
一、如何开发自己的第一个 Serverless Component?
陈涛:Serverless Framework 社区专家
参与 Serverless 社区及开源的相关研发工作。拥有丰富前端、JavaScript 技术经验,以及网站及小程序等项目开发经验,腾讯云 Serverless 系列课程特约讲师。
内容简介:
- Serverless Component 运行机制
- Serverless Component 开发步骤(功能需求,组建配置)
- Serverless Component 组件开发(default 函数,remove 函数)
- Serverless Component 运行,调试与发布
二、Authing 是如何开发 Serverless-OIDC 组件?
高鹏洋:Authing 全栈工程师
曾就职于中科红旗,负责容器云研发。曾参与中国移动 HA 系统研发,CNCF 贡献者,郑州 TFUG 组织者。热爱创造,喜欢探索未知,乐于与人交流,是一名 Acmer 。
内容简介:
OIDC 是 OAuth 2.0 的超集,同时是 Authing 推荐的身份认证最佳实践。在没有 Serverless 的情况下,开发者需要架设一个服务器用来在后端处理 OIDC code 换 Token 和 Token 换用户信息的流程,有了 Serverless 之后,开发者不需要编写任何路由就可以获取用户信息。本次主题将分享如何通过使用腾讯提供的 SCF 和 API 网关 Serverless Component 来快速创造一个 由多个原生 SCF 组成的 Serverless Component:https://github.com/Authing/se...
三、基于Serverless Framework和OIDC 组件设计一个图床应用
谢扬:Authing 创始人,SoLiD 中文社区(learnsolid.cn)发起人
曾任职字节跳动 LarkCloud 云服务部门核心 Hacker,负责⽇活过亿 Serverless 平台产品设计和技术研发,该平台支撑来头条系全产品矩阵:今日头条、抖音、西瓜视频、飞书等。 ⻓期关注生产⼒科技,以提⾼社会生产⼒为个⼈使命。
内容简介:
基于 Serverless Framework 和 Authing 完成一个可以共享和配置访问权限的图床管理应用。
四、线上自由 Q & A 环节
火速扫码报名
火速扫码,回复 “ID”入群
抢占「腾讯会议」 席位,仅300席提示:尽量提前下载安装「腾讯会议」客户端,群内获取会议链接
其他朋友们也可通过B站直播链接参与互动
Authing Live 直播间(https://live.bilibili.com/485... )
相关阅读
- Authing 的故事:我为什么开发 Authing?
- 如何在远程办公中保持高效的研发效率?
- 一份普通人能理解的关于 Authing 的介绍
- Authing 是什么以及为什么需要 Authing?
- 为什么身份认证值得上云?
- Authing @ 2019 总结
- Authing 开发资源最全合集
重磅:Authing 将于2020 Q1 开源,欢迎 Star 关注
什么是 Authing?
Authing 提供专业的身份认证和授权服务。
我们为开发者和企业提供用以保证应用程序安全所需的认证模块,这让开发人员无需成为安全专家。
你可以将任意平台的应用接入到 Authing(无论是新开发的应用还是老应用都可以),同时你还可以自定义应用程序的登录方式(如:邮箱/密码、短信/验证码、扫码登录等)。
你可以根据你使用的技术,来选择我们的 SDK 或调用相关 API 来接入你的应用。当用户发起授权请求时,Authing 会帮助你认证他们的身份和返回必要的用户信息到你的应用中。![]()
<div align=center>Authing 在应用交互中的位置</div>
- 官网:http://authing.cn
- 小登录:https://wxapp.authing.cn/#/
-
仓库: 欢迎 Star,欢迎 PR
- https://gitee.com/Authi_ng
- https://github.com/authing
-
Demo:
- https://sample.authing.cn
- https://github.com/Authing/qr...
- 文档:https://docs.authing.cn/authing/
ActivitiException: Activiti database problem: Tables missing for component(s) identity
报错信息:
Caused by: org.activiti.engine.ActivitiException: Activiti database problem: Tables missing for component(s) identity
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaCheckVersion(DbSqlSession.java:886)
at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1360)
原因是数据库中缺少 activiti 用的 ACT_ID_* 的表。 可以从 activiti 的 jar 包中解压出建表 sql。
Angular 学习系列 - - angular.identity 和 angular.noop

angular.identity
函数返回本身的第一个参数。这个函数一般用于函数风格。
格式:angular.identity()
使用代码:
(function () {
angular.module("Demo", [])
.controller("testCtrl", testCtrl);function testCtrl() { var getResult = function (fn, val) { return (fn || angular.identity)(val);
}; var result = getResult(function (n) { return n * 2; }, 3); // result = 6 var null_result = getResult(null, 3);// null_result = 3 var undefined_result = getResult(undefined, 3);// undefined _result = 3 };
}())
angular.noop
一个不执行任何操作的空函数。这个函数一般用于函数风格。
格式:angular.noop();
贴代码:
(function () {
angular.module("Demo", [])
.controller("testCtrl", testCtrl);function testCtrl() { var _console = function (v) { return v * 2;
}; var getResult = function (fn, val) { return (fn || angular.noop)(val);
}; var firstResult = getResult(_console, 3);//6 var secondResult = getResult(null, 3);//undefined var thirdResult = getResult(undefined, 3);// undefined };
}())
这两个 api 的也是有点醉,总的来说呢,这两个方法都是用来写函数的时候用的,根据上面写的 demo 的代码及运行结果来看,感觉他们的作用是用来防止函数传入的是 null 或者 undefined 或者其他不能操作的对象。因为如果去掉这两个后,你在函数调用的时候传入 null/undefined/ 或者其他不能执行的对象,那么控制台是直接报错的...
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
用了很长一段时间了, 但是一直没有做过任何笔记,感觉 identity 太多东西要写了, 提不起劲. 但是时间一久很多东西都记不清了.
还是写一轮吧. 加深记忆.
这是 0-1 的笔记, 会写好多篇. 写的时候是没有提前设计流程, 所以如果你把它当教程来看是不太妥当的,要读就必须一篇一篇顺着读,间中还会有错误和修正, 请小心.
identity 就是做登入授权的一个架构, asp.net core 自带的. 因为大部分项目都会需要有登入授权机制.
identity server 之后才会提到.
虽然 identity 有自带的 ui 模板,但是为了比较清楚我们还是从一个空白的项目开始吧.
开启 vs 2019 创建一个 razor page 项目.
首先, 我们来做一些基本 setup. identity 需要有一个 sql 储存, 我们就使用 ef core + local sql server (vs 2019 自带) 吧.
如果你不熟悉 ef core 可以看这里 https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro?view=aspnetcore-2.2
先创建一个 DbContext 并继承 IdentityDbContext
namespace Project.Entity
{
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
}
IdentityDbContext 封装了所有 identity 需要的 tables, 比如 user, role, claim 等等...
添加 default connection string config 在 appsettings.json.
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=identity;Trusted_Connection=True;MultipleActiveResultSets=true"
}
添加 service 到 startup.cs
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")
)
);
数据库弄好了以后我们来弄 identity service
identity 给了我们一个 AddDefaultIdentity 的便利
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
但是这个是配合 default ui 的, 我们直接用比较底层的功能 .
参考源码 https://github.com/aspnet/AspNetCore/blob/release/2.2/src/Identity/UI/src/IdentityServiceCollectionUIExtensions.cs#L47-L63
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
services.AddIdentityCore<IdentityUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
})
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Login";
});
从源码抄过来, 省略掉 .AddDefaultUI() 就可以了.
这里还多了一个 ConfigureApplicationCookie, 我设定了一个登入页面路径, 当用户访问一个权限页面的时候就会被自动跳转到登入页面.
identtiy 还可以配置很多 config, 之后才说.
到这里, services 算是弄好了. 我们来弄 AppConfig, 添加 app.UseAuthentication() 就可以了
app.UseCookiePolicy();
app.UseAuthentication(); // 加入这个
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
startup.cs 完成. 我们现在去创建 2 个 razor page. 一个 About, 一个 Login
然后在 About.cshtml.cs 里做一个权限访问.
[Authorize]
public class AboutModel : PageModel
{
public void OnGet()
{
}
}
在到 home page 做一个 <a> 访问 about page
home page
<a asp-page="About" >about</a>
当我们访问 about 时, 就会被跳转到 login 页面了。
目前我们还没有任何账号可以登入,必须先有一个 register 的功能.
这时就会用到数据库了. 刚才我们做了配置但是并还没有生成数据库
我们使用 ef core migrations 来完成这个事情, 如果你不熟悉这个请先看这里
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/
运行 command
dotnet ef migrations add init
dotnet ef database update
搞定!
接下来就是做一个 register form 我们直接在 login page 里头做就好了.
Register form
<form asp-page="Login" asp-page-handler="Login">
<input type="text" name="username" placeholder="username">
<input type="password" name="password" placeholder="password">
<button type="submit">Login</button>
</form>
同时在 Login.cshtml.cs 也做一个 handler
public class LoginInputModel
{
public string username { get; set; }
public string password { get; set; }
}
[BindProperty]
public LoginInputModel LoginData { get; set; }
public async Task OnPostLoginAsync([FromServices] UserManager<IdentityUser> userManager)
{
var user = new IdentityUser
{
UserName = LoginData.username
};
var reuslt = await userManager.CreateAsync(user, LoginData.password);
if (reuslt.Succeeded)
{
}
}
使用 userManager service 来替我们服务. 这是 identity 封装的服务.
这个小功能里头做了不少事儿...
比如 :
检查 password 格式 (不能少于 6 个字啦... 要有大写啦... 等等等, 这个我们是可以配置的, 等下会讲)
检查 username 格式对不对 (有些时候 username 不能包含默写字符串或者符号等, 这个也是可以配置的, 等下讲)
检查 username duplicate,或者 email duplicate (username 一定是 unique, email 则可以配置要不要 unique,之后会讲)
hash password, 我们都知道用户的 password 不可以明文保存在数据库 ( 如果你不知道可以上网搜搜, 比如 https://www.douban.com/group/topic/26022844/ )
这里 hash password 就涉及到 md5, sha256, 盐等等密码学的知识了. identity 就是为我们处理了这些事儿, 省心吧.
最后就是入库啦.
如果你按照目前的代码运行,并且输入
username = "``"
password = "``"
result 会出现 error, 因为 identity 默认对 password 蛮严格的,还有 username 也是有指定的字符串.
我们现在就去调整它. 当 startup.cs 的 service 调整 options
如果你对 options 的使用不熟悉,可以看这里 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.2
services.Configure<IdentityOptions>(options =>
{
// Password settings.
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 0;
options.Password.RequiredUniqueChars = 0;
// User settings.
options.User.AllowedUserNameCharacters = null; // 默认是 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; null 表示啥都行
options.User.RequireUniqueEmail = false;
});
这样就完全没有限制了.
有人喜欢无拘无束,有人不喜欢.
如果我们反而嫌 identity 的 password valid 还不够多呢?
比如, 我要求, password 不可以和 username 相等. 这个怎么实现呢 ?
identity 为我们开放了扩展
首先写一个 validator class 实现接口 IPasswordValidator
public class MyPasswordValidator : IPasswordValidator<IdentityUser>
{
public Task<IdentityResult> ValidateAsync(UserManager<IdentityUser> manager, IdentityUser user, string password)
{
if (user.UserName.Equals(password, StringComparison.OrdinalIgnoreCase))
{
var result = IdentityResult.Failed(new IdentityError
{
Code = "PasswordSameAsUsername",
Description = "password can''t same as username."
});
return Task.FromResult(result);
}
return Task.FromResult(IdentityResult.Success);
}
}
里面可以使用依赖注入获取我们要的任何服务, 如果你的验证需要用数据库, 用 HttpClient 都是可以的.
然后呢,我们把这个 validator 添加进 identity 里头, 到 startup.cs 的 service 里弄
services.AddIdentityCore<IdentityUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
})
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddPasswordValidator<MyPasswordValidator>(); // 加这个
如果有很多个, 也可以一个一个加进去. 并没有限制多少个 validator. 在源码中可以看到, identity 会把所有 validator for loop 来执行 ValidateAsync
user validator 也是类似的实现手法,
创建一个 UserValidator 里面写逻辑
public class MyUserValidator : IUserValidator<IdentityUser>
{
public Task<IdentityResult> ValidateAsync(UserManager<IdentityUser> manager, IdentityUser user)
{
if (!user.UserName.EndsWith("stooges.com.my"))
{
var result = IdentityResult.Failed(new IdentityError
{
Code = "UsernameNotEndsWithStoogesDomain",
Description = "username must ends with stooges.com.my"
});
return Task.FromResult(result);
}
return Task.FromResult(IdentityResult.Success);
}
}
加入 startup.cs service
services.AddIdentityCore<IdentityUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
})
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddPasswordValidator<MyPasswordValidator>()
.AddUserValidator<MyUserValidator>(); // 加这个
搞定 !
这篇总结与回顾 :
- 空白的 razor page
- ef core with identity DbContext setup
- identity setup
- authorize page (about) and login page
- register create user
- password validator
- user validator
github : https://github.com/keatkeat87/aspnetcore-identity
我的 commit 是依据一篇一篇 turorial 写的,可以 checkout 回去观察。
我们今天的关于重置 MSSQL 的 Identity 标识列的值的分享就到这里,谢谢您的阅读,如果想了解更多关于#Shape Identity 001 期:国产 Serverless Identity 开源组件工作坊、ActivitiException: Activiti database problem: Tables missing for component(s) identity、Angular 学习系列 - - angular.identity 和 angular.noop、Asp.net core Identity + identity server + angular 学习笔记 (第一篇)的相关信息,可以在本站进行搜索。
本文标签: